|
|
@@ -33,7 +33,7 @@ namespace System.Linq
|
|
|
if (keySelector == null)
|
|
|
throw Error.ArgumentNull(nameof(keySelector));
|
|
|
|
|
|
- return ToLookupCore(source, keySelector, x => new ValueTask<TSource>(x), comparer, cancellationToken);
|
|
|
+ return ToLookupCore(source, keySelector, comparer, cancellationToken);
|
|
|
}
|
|
|
|
|
|
#if !NO_DEEP_CANCELLATION
|
|
|
@@ -47,7 +47,7 @@ namespace System.Linq
|
|
|
if (keySelector == null)
|
|
|
throw Error.ArgumentNull(nameof(keySelector));
|
|
|
|
|
|
- return ToLookupCore(source, x => keySelector(x, cancellationToken), x => new ValueTask<TSource>(x), comparer, cancellationToken);
|
|
|
+ return ToLookupCore<TSource, TKey>(source, keySelector, comparer, cancellationToken);
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
@@ -113,7 +113,17 @@ namespace System.Linq
|
|
|
return await Internal.LookupWithTask<TKey, TElement>.CreateAsync(source, keySelector, elementSelector, comparer, cancellationToken).ConfigureAwait(false);
|
|
|
}
|
|
|
|
|
|
+ private static async Task<ILookup<TKey, TSource>> ToLookupCore<TSource, TKey>(IAsyncEnumerable<TSource> source, Func<TSource, ValueTask<TKey>> keySelector, IEqualityComparer<TKey> comparer, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ return await Internal.LookupWithTask<TKey, TSource>.CreateAsync(source, keySelector, comparer, cancellationToken).ConfigureAwait(false);
|
|
|
+ }
|
|
|
+
|
|
|
#if !NO_DEEP_CANCELLATION
|
|
|
+ private static async Task<ILookup<TKey, TSource>> ToLookupCore<TSource, TKey>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<TKey>> keySelector, IEqualityComparer<TKey> comparer, CancellationToken cancellationToken)
|
|
|
+ {
|
|
|
+ return await Internal.LookupWithTask<TKey, TSource>.CreateAsync(source, keySelector, comparer, cancellationToken).ConfigureAwait(false);
|
|
|
+ }
|
|
|
+
|
|
|
private static async Task<ILookup<TKey, TElement>> ToLookupCore<TSource, TKey, TElement>(IAsyncEnumerable<TSource> source, Func<TSource, CancellationToken, ValueTask<TKey>> keySelector, Func<TSource, CancellationToken, ValueTask<TElement>> elementSelector, IEqualityComparer<TKey> comparer, CancellationToken cancellationToken)
|
|
|
{
|
|
|
return await Internal.LookupWithTask<TKey, TElement>.CreateAsync(source, keySelector, elementSelector, comparer, cancellationToken).ConfigureAwait(false);
|