public static async Task ForEachAsync <T>(this IAsyncFastEnumerable <T> source, Func <T, Task> next) { var e = source.GetAsyncEnumerator(); try { while (await e.WaitForNextAsync().ConfigureAwait(false)) { while (true) { var item = e.TryGetNext(out var success); if (!success) { break; } await next(item).ConfigureAwait(false); } } } finally { await e.DisposeAsync().ConfigureAwait(false); } }
public override async Task <bool> MoveNextAsync() { switch (_state) { case 1: _enumerator = _source.GetAsyncEnumerator(); _state = 2; goto case 2; case 2: do { while (true) { var item = _enumerator.TryGetNext(out var success); if (!success) { break; } else { _current = item; return(true); } } } while (await _enumerator.WaitForNextAsync().ConfigureAwait(false)); break; } return(false); }
public static async Task <R> Aggregate <T, R>(this IAsyncFastEnumerable <T> source, R seed, Func <R, T, Task <R> > aggregate) { var res = seed; var e = source.GetAsyncEnumerator(); try { while (await e.WaitForNextAsync().ConfigureAwait(false)) { while (true) { var item = e.TryGetNext(out var success); if (!success) { break; } res = await aggregate(res, item).ConfigureAwait(false); } } } finally { await e.DisposeAsync().ConfigureAwait(false); } return(res); }
public override Task <bool> WaitForNextAsync() { switch (_state) { case 1: _enumerator = _source.GetAsyncEnumerator(); _state = 2; goto case 2; case 2: return(_enumerator.WaitForNextAsync()); } return(False); }
public override async Task <bool> WaitForNextAsync() { switch (_state) { case 1: _enumerator = _source.GetAsyncEnumerator(); _state = 2; goto case 2; case 2: do { while (true) { var item = _enumerator.TryGetNext(out var success); if (!success) { break; } else { if (await _predicate(item).ConfigureAwait(false)) { _hasNext = true; _next = item; return(true); } } } }while (await _enumerator.WaitForNextAsync().ConfigureAwait(false)); break; } _hasNext = false; _next = default(T); return(false); }