|
|
@@ -28,24 +28,6 @@ namespace System.Linq
|
|
|
return ElementAt_(source, index, cancellationToken);
|
|
|
}
|
|
|
|
|
|
- public static Task<TSource> ElementAtOrDefault<TSource>(this IAsyncEnumerable<TSource> source, int index)
|
|
|
- {
|
|
|
- if (source == null)
|
|
|
- throw new ArgumentNullException(nameof(source));
|
|
|
-
|
|
|
- return ElementAtOrDefault(source, index, CancellationToken.None);
|
|
|
- }
|
|
|
-
|
|
|
- public static Task<TSource> ElementAtOrDefault<TSource>(this IAsyncEnumerable<TSource> source, int index, CancellationToken cancellationToken)
|
|
|
- {
|
|
|
- if (source == null)
|
|
|
- throw new ArgumentNullException(nameof(source));
|
|
|
- if (index < 0)
|
|
|
- throw new ArgumentOutOfRangeException(nameof(index));
|
|
|
-
|
|
|
- return ElementAtOrDefault_(source, index, cancellationToken);
|
|
|
- }
|
|
|
-
|
|
|
private static async Task<TSource> ElementAt_<TSource>(IAsyncEnumerable<TSource> source, int index, CancellationToken cancellationToken)
|
|
|
{
|
|
|
if (source is IList<TSource> list)
|
|
|
@@ -77,32 +59,5 @@ namespace System.Linq
|
|
|
|
|
|
throw new ArgumentOutOfRangeException(nameof(index));
|
|
|
}
|
|
|
-
|
|
|
- private static async Task<TSource> ElementAtOrDefault_<TSource>(IAsyncEnumerable<TSource> source, int index, CancellationToken cancellationToken)
|
|
|
- {
|
|
|
- if (index >= 0)
|
|
|
- {
|
|
|
- var e = source.GetAsyncEnumerator();
|
|
|
-
|
|
|
- try
|
|
|
- {
|
|
|
- while (await e.MoveNextAsync(cancellationToken).ConfigureAwait(false))
|
|
|
- {
|
|
|
- if (index == 0)
|
|
|
- {
|
|
|
- return e.Current;
|
|
|
- }
|
|
|
-
|
|
|
- index--;
|
|
|
- }
|
|
|
- }
|
|
|
- finally
|
|
|
- {
|
|
|
- await e.DisposeAsync().ConfigureAwait(false);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return default(TSource);
|
|
|
- }
|
|
|
}
|
|
|
}
|