/// <summary> /// Enumerates a given <paramref name="enumerable"/> until the predicate <paramref name="predicate"/> returns true. /// </summary> private static System.Collections.Generic.IAsyncEnumerable <T> StopAfter <T>(this System.Collections.Generic.IAsyncEnumerable <T> enumerable, Func <T, bool> predicate) { return(AsyncEnumerable.Create( token => { var enumerator = enumerable.GetAsyncEnumerator(token); bool stop = false; return AsyncEnumerator.Create( async() => { if (stop) { return false; } if (await enumerator.MoveNextAsync(token)) { if (!predicate(enumerator.Current)) { stop = true; } return true; } return false; }, () => enumerator.Current, () => enumerator.DisposeAsync()); })); }
public Task GetSelectorsCallCounterBumpedOnUse() { return(RunCacheAndSessionTestAsync(async(cache, session, context) => { System.Collections.Generic.IAsyncEnumerable <GetSelectorResult> enumerator = session.GetSelectors(context, Fingerprint.Random(), Token); await enumerator.ToListAsync(CancellationToken.None); long counter = await GetCounterValue("GetSelectorsCall", cache, context); counter.Should().Be(1); })); }