public static async Task <List <T> > ToListAsync <T>(this IEnumerableAsync <T> enumerable, CancellationToken cancellationToken = default(CancellationToken)) { using (var enumerator = await enumerable.GetEnumeratorAsync(cancellationToken).ConfigureAwait(false)) { return(await enumerator.ToListAsync(cancellationToken).ConfigureAwait(false)); } }
public static async Task ForEachAsync <T>(this IEnumerableAsync <T> list, Func <T, Task> func) { var enumerator = await list.GetEnumeratorAsync(); while (await enumerator.MoveNextAsync()) { await func(enumerator.Current); } }
private IEnumerable <IPackageSearchMetadata> ConvertToEnumerable(IEnumerableAsync <IPackageSearchMetadata> packagesAsync) { var enumeratorAsync = packagesAsync.GetEnumeratorAsync(); var packages = new List <IPackageSearchMetadata>(); if (enumeratorAsync == null) { return(Enumerable.Empty <IPackageSearchMetadata>()); } while (enumeratorAsync.MoveNextAsync().ConfigureAwait(false).GetAwaiter().GetResult()) { packages.Add(enumeratorAsync.Current); } return(packages); }
public static async Task <T> SingleAsync <T>(this IEnumerableAsync <T> enumerable, CancellationToken cancellationToken = default(CancellationToken)) { using (var enumerator = await enumerable.GetEnumeratorAsync(cancellationToken).ConfigureAwait(false)) { if (await enumerator.MoveNextAsync(cancellationToken).ConfigureAwait(false)) { var value = enumerator.Current; if (await enumerator.MoveNextAsync(cancellationToken).ConfigureAwait(false)) { throw MoreThanOneElement(); } return(value); } else { throw EmptySequence(); } } }