示例#1
0
        public void TestCancelStuckEnumerable()
        {
            var lastValue = -1;
            var cancellation = new Cancellation();
            var stickWhileEvent = new ManualResetEvent(false);
            var ints = new DisposableEnumerator<int>(StuckDownEnumerable(stickWhileEvent));

            var select = ints
                .SelectParallely(i => Interlocked.Exchange(ref lastValue, i), cancellation);

            new Thread(() =>
            {
                Thread.Sleep(100);
                cancellation.Cancel();
            }).Start();

            AssertEx.Throws<OperationCanceledException>(() => select.AsEnumerable().ToList());
            Assert.AreEqual(1, lastValue);

            stickWhileEvent.Set();
            Thread.Sleep(100);
            Assert.IsTrue(ints.IsDisposed);
        }
示例#2
0
 public void TestDisposingEnumerable()
 {
     var obj = new DisposableEnumerator<int>(Enumerable.Range(0, 11));
     Assert.IsFalse(obj.IsDisposed);
     var list = obj.SelectParallely(i => i).AsEnumerable().ToList();
     var sum = list.Sum();
     Assert.AreEqual(55, sum);
     Thread.Sleep(100);
     Assert.IsTrue(obj.IsDisposed);
 }