瀏覽代碼

Updated test to show defect in ToAsyncEnumerable

jnm2 9 年之前
父節點
當前提交
97522da57f
共有 1 個文件被更改,包括 6 次插入3 次删除
  1. 6 3
      Ix.NET/Source/Tests/AsyncTests.Bugs.cs

+ 6 - 3
Ix.NET/Source/Tests/AsyncTests.Bugs.cs

@@ -178,15 +178,17 @@ namespace Tests
         }
         }
 
 
         [Fact]
         [Fact]
-        public void CanCancelMoveNext()
+        public void CanCancelMoveNextOnBlockingToAsync()
         {
         {
             var evt = new ManualResetEvent(false);
             var evt = new ManualResetEvent(false);
-            var xs = Blocking(evt).ToAsyncEnumerable().Select(x => x).Where(x => true);
+            var blockingMoveNextStarted = new ManualResetEvent(false);
+            var xs = Blocking(evt, blockingMoveNextStarted).ToAsyncEnumerable();
 
 
             var e = xs.GetEnumerator();
             var e = xs.GetEnumerator();
             var cts = new CancellationTokenSource();
             var cts = new CancellationTokenSource();
             var t = e.MoveNext(cts.Token);
             var t = e.MoveNext(cts.Token);
 
 
+            blockingMoveNextStarted.WaitOne();
             cts.Cancel();
             cts.Cancel();
 
 
             try
             try
@@ -202,8 +204,9 @@ namespace Tests
             evt.Set();
             evt.Set();
         }
         }
 
 
-        static IEnumerable<int> Blocking(ManualResetEvent evt)
+        static IEnumerable<int> Blocking(ManualResetEvent evt, ManualResetEvent blockingStarted)
         {
         {
+            blockingStarted.Set();
             evt.WaitOne();
             evt.WaitOne();
             yield return 42;
             yield return 42;
         }
         }