private static async Task _enumerate(AsyncEnumerator <TResult> .Yield yield, SelectWithIndexContext <TSource, TResult> context) { using (var enumerator = await context.Source.GetAsyncEnumeratorAsync(yield.CancellationToken).ConfigureAwait(false)) { long index = 0; while (await enumerator.MoveNextAsync(yield.CancellationToken).ConfigureAwait(false)) { await yield.ReturnAsync(context.Selector(enumerator.Current, index)).ConfigureAwait(false); index++; } } }
private static async Task _enumerate(AsyncEnumerator <TResult> .Yield yield, SelectWithIndexContext <TSource, TResult> context) { try { long index = 0; while (await context.Source.MoveNextAsync(yield.CancellationToken).ConfigureAwait(false)) { await yield.ReturnAsync(context.Selector(context.Source.Current, index)).ConfigureAwait(false); index++; } } finally { if (context.DisposeSource) { context.Source.Dispose(); } } }