private async Task<TryGetSequenceValueResult> TryGetSequenceValue(SequenceKey sequenceKey)
{
var sequence = await StateProvider.GetAsync(sequenceKey);
if (sequence == null)
{
throw new SequenceCouldNotBeFoundException();
}
var result = new TryGetSequenceValueResult
{
Value = sequence.StartAt
};
if (sequence.Increment == 0)
{
result.Result = true;
return result;
}
var sequenceValue = sequence.CurrentValue + sequence.Increment;
sequenceValue = CycleOrFailIfGreaterThanMaximum(sequence, sequenceValue);
sequenceValue = CycleOrFailIfLessThanMinimum(sequence, sequenceValue);
sequence.CurrentValue = sequenceValue;
var updateResult = await StateProvider.UpdateAsync(sequenceKey, sequence);
if (!updateResult)
{
return result;
}
result.Value = sequence.CurrentValue;
result.Result = true;
return result;
}