Use source generator to generate AllAsync overloads
This commit is contained in:
Родитель
ba8ba26b0f
Коммит
dc96f68200
|
@ -11,7 +11,6 @@ namespace System.Linq
|
|||
partial class AsyncEnumerable
|
||||
{
|
||||
#if SUPPORT_FLAT_ASYNC_API
|
||||
public static ValueTask<bool> AllAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<bool>> predicate, CancellationToken cancellationToken = default) => AllAwaitAsyncCore<TSource>(source, predicate, cancellationToken);
|
||||
public static ValueTask<bool> AnyAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<bool>> predicate, CancellationToken cancellationToken = default) => AnyAwaitAsyncCore<TSource>(source, predicate, cancellationToken);
|
||||
public static ValueTask<double> AverageAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<int>> selector, CancellationToken cancellationToken = default) => AverageAwaitAsyncCore<TSource>(source, selector, cancellationToken);
|
||||
public static ValueTask<double> AverageAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<long>> selector, CancellationToken cancellationToken = default) => AverageAwaitAsyncCore<TSource>(source, selector, cancellationToken);
|
||||
|
@ -108,7 +107,6 @@ namespace System.Linq
|
|||
public static IAsyncEnumerable<TResult> Zip<TFirst, TSecond, TResult>(this IAsyncEnumerable<TFirst> first, IAsyncEnumerable<TSecond> second, Func<TFirst, TSecond, ValueTask<TResult>> selector) => ZipAwaitCore<TFirst, TSecond, TResult>(first, second, selector);
|
||||
|
||||
#if !NO_DEEP_CANCELLATION
|
||||
public static ValueTask<bool> AllAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<bool>> predicate, CancellationToken cancellationToken = default) => AllAwaitWithCancellationAsyncCore<TSource>(source, predicate, cancellationToken);
|
||||
public static ValueTask<bool> AnyAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<bool>> predicate, CancellationToken cancellationToken = default) => AnyAwaitWithCancellationAsyncCore<TSource>(source, predicate, cancellationToken);
|
||||
public static ValueTask<double> AverageAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<int>> selector, CancellationToken cancellationToken = default) => AverageAwaitWithCancellationAsyncCore<TSource>(source, selector, cancellationToken);
|
||||
public static ValueTask<double> AverageAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<long>> selector, CancellationToken cancellationToken = default) => AverageAwaitWithCancellationAsyncCore<TSource>(source, selector, cancellationToken);
|
||||
|
@ -205,18 +203,6 @@ namespace System.Linq
|
|||
public static IAsyncEnumerable<TResult> Zip<TFirst, TSecond, TResult>(this IAsyncEnumerable<TFirst> first, IAsyncEnumerable<TSecond> second, Func<TFirst, TSecond, CancellationToken, ValueTask<TResult>> selector) => ZipAwaitWithCancellationCore<TFirst, TSecond, TResult>(first, second, selector);
|
||||
#endif
|
||||
#else
|
||||
/// <summary>
|
||||
/// Determines whether all elements in an async-enumerable sequence satisfy a condition.
|
||||
/// </summary>
|
||||
/// <typeparam name="TSource">The type of element in the sequence.</typeparam>
|
||||
/// <param name="source">An async-enumerable sequence whose elements to apply the predicate to.</param>
|
||||
/// <param name="predicate">An asynchronous predicate to apply to each element of the source sequence.</param>
|
||||
/// <param name="cancellationToken">An optional cancellation token to be used for cancelling the sequence at any time.</param>
|
||||
/// <returns>A ValueTask containing a value indicating whether all elements in the sequence pass the test in the specified predicate.</returns>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="predicate"/> is <see langword="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<bool> AllAwaitAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<bool>> predicate, CancellationToken cancellationToken = default) => AllAwaitAsyncCore<TSource>(source, predicate, cancellationToken);
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether any element in an async-enumerable sequence satisfies a condition.
|
||||
/// </summary>
|
||||
|
@ -1312,7 +1298,6 @@ namespace System.Linq
|
|||
public static IAsyncEnumerable<TResult> ZipAwait<TFirst, TSecond, TResult>(this IAsyncEnumerable<TFirst> first, IAsyncEnumerable<TSecond> second, Func<TFirst, TSecond, ValueTask<TResult>> selector) => ZipAwaitCore<TFirst, TSecond, TResult>(first, second, selector);
|
||||
|
||||
#if !NO_DEEP_CANCELLATION
|
||||
public static ValueTask<bool> AllAwaitWithCancellationAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<bool>> predicate, CancellationToken cancellationToken = default) => AllAwaitWithCancellationAsyncCore<TSource>(source, predicate, cancellationToken);
|
||||
public static ValueTask<bool> AnyAwaitWithCancellationAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<bool>> predicate, CancellationToken cancellationToken = default) => AnyAwaitWithCancellationAsyncCore<TSource>(source, predicate, cancellationToken);
|
||||
public static ValueTask<double> AverageAwaitWithCancellationAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<int>> selector, CancellationToken cancellationToken = default) => AverageAwaitWithCancellationAsyncCore<TSource>(source, selector, cancellationToken);
|
||||
public static ValueTask<double> AverageAwaitWithCancellationAsync<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<long>> selector, CancellationToken cancellationToken = default) => AverageAwaitWithCancellationAsyncCore<TSource>(source, selector, cancellationToken);
|
||||
|
|
|
@ -43,7 +43,18 @@ namespace System.Linq
|
|||
}
|
||||
}
|
||||
|
||||
internal static ValueTask<bool> AllAwaitAsyncCore<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<bool>> predicate, CancellationToken cancellationToken = default)
|
||||
/// <summary>
|
||||
/// Determines whether all elements in an async-enumerable sequence satisfy a condition.
|
||||
/// </summary>
|
||||
/// <typeparam name="TSource">The type of element in the sequence.</typeparam>
|
||||
/// <param name="source">An async-enumerable sequence whose elements to apply the predicate to.</param>
|
||||
/// <param name="predicate">An asynchronous predicate to apply to each element of the source sequence.</param>
|
||||
/// <param name="cancellationToken">An optional cancellation token to be used for cancelling the sequence at any time.</param>
|
||||
/// <returns>A ValueTask containing a value indicating whether all elements in the sequence pass the test in the specified predicate.</returns>
|
||||
/// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="predicate"/> is <see langword="null"/>.</exception>
|
||||
/// <remarks>The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior.</remarks>
|
||||
[GenerateAsyncOverload]
|
||||
private static ValueTask<bool> AllAwaitAsyncCore<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<bool>> predicate, CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (source == null)
|
||||
throw Error.ArgumentNull(nameof(source));
|
||||
|
@ -67,6 +78,7 @@ namespace System.Linq
|
|||
}
|
||||
|
||||
#if !NO_DEEP_CANCELLATION
|
||||
[GenerateAsyncOverload]
|
||||
internal static ValueTask<bool> AllAwaitWithCancellationAsyncCore<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<bool>> predicate, CancellationToken cancellationToken = default)
|
||||
{
|
||||
if (source == null)
|
||||
|
|
Загрузка…
Ссылка в новой задаче