| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 | // Licensed to the .NET Foundation under one or more agreements.// The .NET Foundation licenses this file to you under the MIT License.// See the LICENSE file in the project root for more information. using System.Collections.Generic;using System.Threading;using System.Threading.Tasks;namespace System.Linq{    public static partial class AsyncEnumerable    {        /// <summary>        /// Creates a list from an async-enumerable sequence.        /// </summary>        /// <typeparam name="TSource">The type of the elements in the source sequence.</typeparam>        /// <param name="source">The source async-enumerable sequence to get a list of elements for.</param>        /// <param name="cancellationToken">The optional cancellation token to be used for cancelling the sequence at any time.</param>        /// <returns>An async-enumerable sequence containing a single element with a list containing all the elements of the source sequence.</returns>        /// <exception cref="ArgumentNullException"><paramref name="source"/> is null.</exception>        /// <remarks>The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior.</remarks>        public static ValueTask<List<TSource>> ToListAsync<TSource>(this IAsyncEnumerable<TSource> source, CancellationToken cancellationToken = default)        {            if (source == null)                throw Error.ArgumentNull(nameof(source));            if (source is IAsyncIListProvider<TSource> listProvider)                return listProvider.ToListAsync(cancellationToken);            return Core(source, cancellationToken);            static async ValueTask<List<TSource>> Core(IAsyncEnumerable<TSource> source, CancellationToken cancellationToken)            {                var list = new List<TSource>();                await foreach (var item in source.WithCancellation(cancellationToken).ConfigureAwait(false))                {                    list.Add(item);                }                return list;            }        }    }}
 |