public async IAsyncEnumerable <OccuredEvent> Start(long?position) //TODO Check Callers! { long ordinal = position ?? 0; running = true; while (running) { int count = 0; var work = false; await foreach (var commit in repo.EnumerateStartingAfter(ordinal)) { ordinal = commit.Ordinal; foreach (IEvent @event in mapper.ExtractEvents(commit)) { work = true; var dto = new OccuredEvent(@event.Headers.GetLong(EventHeaderKeys.CommitId), @event); yield return(dto); count++; } LogProcessedEvents(count); await Delay(work); } } }
public IObservable <OccuredEvent> Start(long?position) { long ordinal = position ?? 0; running = true; return(Observable.Create <OccuredEvent>(async observer => { while (running) { int count = 0; var work = false; await repo.EnumerateStartingAfter(ordinal, commit => { ordinal = commit.Ordinal; foreach (IEvent @event in mapper.ExtractEvents(commit)) { work = true; var dto = new OccuredEvent(@event.Headers.GetLong(EventHeaderKeys.CommitId), @event); observer.OnNext(dto); count++; } }); LogProcessedEvents(count); await Delay(work); } observer.OnCompleted(); })); }