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