|
@@ -22,6 +22,16 @@ namespace System.Linq
|
|
|
return All(source, predicate, CancellationToken.None);
|
|
|
}
|
|
|
|
|
|
+ public static Task<bool> All<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, Task<bool>> predicate)
|
|
|
+ {
|
|
|
+ if (source == null)
|
|
|
+ throw new ArgumentNullException(nameof(source));
|
|
|
+ if (predicate == null)
|
|
|
+ throw new ArgumentNullException(nameof(predicate));
|
|
|
+
|
|
|
+ return All(source, predicate, CancellationToken.None);
|
|
|
+ }
|
|
|
+
|
|
|
public static Task<bool> All<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, bool> predicate, CancellationToken cancellationToken)
|
|
|
{
|
|
|
if (source == null)
|
|
@@ -32,6 +42,16 @@ namespace System.Linq
|
|
|
return All_(source, predicate, cancellationToken);
|
|
|
}
|
|
|
|
|
|
+ public static Task<bool> All<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, Task<bool>> predicate, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ if (source == null)
|
|
|
+ throw new ArgumentNullException(nameof(source));
|
|
|
+ if (predicate == null)
|
|
|
+ throw new ArgumentNullException(nameof(predicate));
|
|
|
+
|
|
|
+ return All_(source, predicate, cancellationToken);
|
|
|
+ }
|
|
|
+
|
|
|
public static Task<bool> Any<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, bool> predicate)
|
|
|
{
|
|
|
if (source == null)
|
|
@@ -42,6 +62,16 @@ namespace System.Linq
|
|
|
return Any(source, predicate, CancellationToken.None);
|
|
|
}
|
|
|
|
|
|
+ public static Task<bool> Any<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, Task<bool>> predicate)
|
|
|
+ {
|
|
|
+ if (source == null)
|
|
|
+ throw new ArgumentNullException(nameof(source));
|
|
|
+ if (predicate == null)
|
|
|
+ throw new ArgumentNullException(nameof(predicate));
|
|
|
+
|
|
|
+ return Any(source, predicate, CancellationToken.None);
|
|
|
+ }
|
|
|
+
|
|
|
public static Task<bool> Any<TSource>(this IAsyncEnumerable<TSource> source)
|
|
|
{
|
|
|
if (source == null)
|
|
@@ -60,6 +90,16 @@ namespace System.Linq
|
|
|
return Any_(source, predicate, cancellationToken);
|
|
|
}
|
|
|
|
|
|
+ public static Task<bool> Any<TSource>(this IAsyncEnumerable<TSource> source, Func<TSource, Task<bool>> predicate, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ if (source == null)
|
|
|
+ throw new ArgumentNullException(nameof(source));
|
|
|
+ if (predicate == null)
|
|
|
+ throw new ArgumentNullException(nameof(predicate));
|
|
|
+
|
|
|
+ return Any_(source, predicate, cancellationToken);
|
|
|
+ }
|
|
|
+
|
|
|
public static async Task<bool> Any<TSource>(this IAsyncEnumerable<TSource> source, CancellationToken cancellationToken)
|
|
|
{
|
|
|
if (source == null)
|
|
@@ -98,6 +138,27 @@ namespace System.Linq
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ private static async Task<bool> All_<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, Task<bool>> predicate, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ var e = source.GetAsyncEnumerator();
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ while (await e.MoveNextAsync(cancellationToken)
|
|
|
+ .ConfigureAwait(false))
|
|
|
+ {
|
|
|
+ if (!await predicate(e.Current).ConfigureAwait(false))
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finally
|
|
|
+ {
|
|
|
+ await e.DisposeAsync().ConfigureAwait(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
private static async Task<bool> Any_<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, bool> predicate, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var e = source.GetAsyncEnumerator();
|
|
@@ -118,5 +179,26 @@ namespace System.Linq
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
+ private static async Task<bool> Any_<TSource>(IAsyncEnumerable<TSource> source, Func<TSource, Task<bool>> predicate, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ var e = source.GetAsyncEnumerator();
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ while (await e.MoveNextAsync(cancellationToken)
|
|
|
+ .ConfigureAwait(false))
|
|
|
+ {
|
|
|
+ if (await predicate(e.Current).ConfigureAwait(false))
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finally
|
|
|
+ {
|
|
|
+ await e.DisposeAsync().ConfigureAwait(false);
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
}
|