浏览代码

Grant cancellation for ToArray in Except and Intersect.

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

+ 3 - 3
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Except.cs

@@ -83,7 +83,7 @@ namespace System.Linq
                         _firstEnumerator = _first.GetAsyncEnumerator(cancellationToken);
                         _set = new Set<TSource>(_comparer);
                         _setFilled = false;
-                        _fillSetTask = FillSetAsync();
+                        _fillSetTask = FillSetAsync(cancellationToken);
 
                         state = AsyncIteratorState.Iterating;
                         goto case AsyncIteratorState.Iterating;
@@ -124,9 +124,9 @@ namespace System.Linq
                 return false;
             }
 
-            private async Task FillSetAsync()
+            private async Task FillSetAsync(CancellationToken cancellationToken)
             {
-                var array = await _second.ToArray().ConfigureAwait(false);
+                var array = await _second.ToArray(cancellationToken).ConfigureAwait(false);
 
                 foreach (var t in array)
                 {

+ 3 - 3
Ix.NET/Source/System.Linq.Async/System/Linq/Operators/Intersect.cs

@@ -83,7 +83,7 @@ namespace System.Linq
                         _firstEnumerator = _first.GetAsyncEnumerator(cancellationToken);
                         _set = new Set<TSource>(_comparer);
                         _setFilled = false;
-                        _fillSetTask = FillSet();
+                        _fillSetTask = FillSet(cancellationToken);
 
                         state = AsyncIteratorState.Iterating;
                         goto case AsyncIteratorState.Iterating;
@@ -124,9 +124,9 @@ namespace System.Linq
                 return false;
             }
 
-            private async Task FillSet()
+            private async Task FillSet(CancellationToken cancellationToken)
             {
-                var array = await _second.ToArray().ConfigureAwait(false);
+                var array = await _second.ToArray(cancellationToken).ConfigureAwait(false);
                 for (var i = 0; i < array.Length; i++)
                 {
                     _set.Add(array[i]);