瀏覽代碼

More proper forwarding to ToLookup.

Bart De Smet 7 年之前
父節點
當前提交
0d5c58baa0
共有 1 個文件被更改,包括 12 次插入2 次删除
  1. 12 2
      Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToLookup.cs

+ 12 - 2
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/ToLookup.cs

@@ -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);