public async IAsyncEnumerable <DescribedEvent> EnumerateDescribed(EnumerateDirection direction, int limit, [EnumeratorCancellation] CancellationToken token) { await foreach (var entry in Enumerate(direction, limit, token)) { var item = DescribeEvent(entry); yield return(item); } }
public IAsyncEnumerable <EventCommit> EnumerateCommits(string type, string id, long maxversion, EnumerateDirection direction = EnumerateDirection.Ascending, int?limit = null, CancellationToken token = default) { FilterDefinition <EventCommit> query = Filters.And(CommitFilters.ByAggregate(type, id), Filters.Lte(x => x.VersionEvents, maxversion)); return(Enumerate(query, direction, limit, token)); }
private async IAsyncEnumerable <EventCommit> Enumerate(FilterDefinition <EventCommit> query, EnumerateDirection direction, int?limit, [EnumeratorCancellation] CancellationToken token) { FindOptions options; if (DeactivateTimeoutOnRead) { options = new FindOptions() { NoCursorTimeout = true, MaxTime = TimeSpan.MaxValue, MaxAwaitTime = TimeSpan.MaxValue, }; } else { options = new FindOptions(); } SortDefinition <EventCommit> sort; if (direction == EnumerateDirection.Ascending) { sort = Sorts.Ascending(x => x.Ordinal); } else { sort = Sorts.Descending(x => x.Ordinal); } var find = Collection .Find(query, options) .Sort(sort); if (limit.HasValue && limit > 0) { find = find.Limit(limit); } IAsyncCursor <EventCommit> cursor = await find .ToCursorAsync(token); while (await cursor.MoveNextAsync(token) && !token.IsCancellationRequested) { foreach (EventCommit item in cursor.Current) { token.ThrowIfCancellationRequested(); yield return(item); } } }
public abstract IAsyncEnumerable <IEvent> Enumerate(EnumerateDirection direction, int limit, CancellationToken token);
public IAsyncEnumerable <EventCommit> EnumerateAllCommits( EnumerateDirection direction = EnumerateDirection.Ascending, int?limit = null, CancellationToken token = default) { return(Enumerate(CommitFilters.All, direction, limit, token)); }
public override IAsyncEnumerable <IEvent> Enumerate(EnumerateDirection direction, int limit, CancellationToken token) { throw new NotImplementedException(); }