private async Task <bool> ReadEventsCallbackAsync(StreamEventsSlice slice, long?lastEventNumber) { bool flag1 = ShouldStop; if (!flag1) { flag1 = await ProcessEventsAsync(lastEventNumber, slice).ConfigureAwait(false); } bool flag2 = flag1; if (flag2 && Verbose) { Log.Debug("Catch-up Subscription {0} to {1}: finished reading events, nextReadEventNumber = {2}.", (object)SubscriptionName, IsSubscribedToAll ? (object)"<all>" : (object)StreamId, (object)_nextReadEventNumber); } return(flag2); }
private async Task <bool> ProcessEventsAsync(long?lastEventNumber, StreamEventsSlice slice) { bool done; switch (slice) { case StreamDeletedSlice _: throw new StreamDeletedException(new StreamName(StreamId)); case StreamNotFoundSlice _: if (lastEventNumber == -1) { throw new Exception( $"Impossible: stream {StreamId} disappeared in the middle of catching up subscription {SubscriptionName}."); } done = true; break; case StreamEventsSlice _: RecordedEvent[] resolvedEventArray = slice.Events; for (int index = 0; index < resolvedEventArray.Length; ++index) { await TryProcessAsync(resolvedEventArray[index]).ConfigureAwait(false); } _nextReadEventNumber = slice.NextEventNumber; if (lastEventNumber.HasValue) { done = slice.NextEventNumber > lastEventNumber.Value; } else { done = slice.IsEndOfStream; } break; default: throw new ArgumentOutOfRangeException(string.Format($"Subscription {SubscriptionName} unexpected StreamEventsSlice.Status.")); } if (!done && slice.IsEndOfStream) { Thread.Sleep(1); } return(done); }