// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the Apache 2.0 License. // See the LICENSE file in the project root for more information. using System.Collections.Generic; using System.Runtime.CompilerServices; namespace System.Threading.Tasks { public static class AsyncEnumerableExtensions { #if !BCL_HAS_CONFIGUREAWAIT // https://github.com/dotnet/coreclr/pull/21939 /// Configures how awaits on the tasks returned from an async iteration will be performed. /// The type of the objects being iterated. /// The source enumerable being iterated. /// Whether to capture and marshal back to the current context. /// The configured enumerable. public static ConfiguredCancelableAsyncEnumerable ConfigureAwait( this IAsyncEnumerable source, bool continueOnCapturedContext) => new ConfiguredCancelableAsyncEnumerable(source, continueOnCapturedContext, cancellationToken: default); /// Sets the to be passed to when iterating. /// The type of the objects being iterated. /// The source enumerable being iterated. /// The to use. /// The configured enumerable. public static ConfiguredCancelableAsyncEnumerable WithCancellation( this IAsyncEnumerable source, CancellationToken cancellationToken) => new ConfiguredCancelableAsyncEnumerable(source, continueOnCapturedContext: true, cancellationToken); #endif public static ConfiguredCancelableAsyncEnumerable.Enumerator ConfigureAwait(this IAsyncEnumerator enumerator, bool continueOnCapturedContext) { if (enumerator == null) throw Error.ArgumentNull(nameof(enumerator)); return new ConfiguredCancelableAsyncEnumerable.Enumerator(enumerator, continueOnCapturedContext); } } }