浏览代码

Remove UnionWithAsync.

Bart De Smet 7 年之前
父节点
当前提交
24e92b0414

+ 15 - 8
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Distinct.cs

@@ -55,9 +55,20 @@ namespace System.Linq
                 return s.ToList();
             }
 
-            public async Task<int> GetCountAsync(bool onlyIfCheap, CancellationToken cancellationToken)
+            public Task<int> GetCountAsync(bool onlyIfCheap, CancellationToken cancellationToken)
             {
-                return onlyIfCheap ? -1 : (await FillSetAsync(cancellationToken).ConfigureAwait(false)).Count;
+                if (onlyIfCheap)
+                {
+                    return TaskExt.MinusOne;
+                }
+
+                return Core();
+
+                async Task<int> Core()
+                {
+                    var s = await FillSetAsync(cancellationToken).ConfigureAwait(false);
+                    return s.Count;
+                }
             }
 
             public override AsyncIterator<TSource> Clone()
@@ -115,13 +126,9 @@ namespace System.Linq
                 return false;
             }
 
-            private async Task<Set<TSource>> FillSetAsync(CancellationToken cancellationToken)
+            private Task<Set<TSource>> FillSetAsync(CancellationToken cancellationToken)
             {
-                var s = new Set<TSource>(_comparer);
-
-                await s.UnionWithAsync(_source, cancellationToken).ConfigureAwait(false);
-
-                return s;
+                return AsyncEnumerableHelpers.ToSet(_source, _comparer, cancellationToken);
             }
         }
     }

+ 13 - 1
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Union.cs

@@ -172,7 +172,19 @@ namespace System.Linq
                         return set;
                     }
 
-                    await set.UnionWithAsync(enumerable, cancellationToken).ConfigureAwait(false);
+                    var e = enumerable.GetAsyncEnumerator(cancellationToken);
+
+                    try
+                    {
+                        while (await e.MoveNextAsync().ConfigureAwait(false))
+                        {
+                            set.Add(e.Current);
+                        }
+                    }
+                    finally
+                    {
+                        await e.DisposeAsync().ConfigureAwait(false);
+                    }
                 }
             }
 

+ 0 - 17
Ix.NET/Source/System.Linq.Async/System/Linq/Set.cs

@@ -145,23 +145,6 @@ namespace System.Linq
             _slots = newSlots;
         }
 
-        public async ValueTask UnionWithAsync(IAsyncEnumerable<TElement> other, CancellationToken cancellationToken)
-        {
-            var enu = other.GetAsyncEnumerator(cancellationToken);
-
-            try
-            {
-                while (await enu.MoveNextAsync().ConfigureAwait(false))
-                {
-                    Add(enu.Current);
-                }
-            }
-            finally
-            {
-                await enu.DisposeAsync().ConfigureAwait(false);
-            }
-        }
-
         internal struct Slot
         {
             internal int _hashCode;