public void CancelFailsOnCompletedTask([Values(true, false)] bool mayInterruptIfRunning) { FutureTask <T> task = new FutureTask <T>(_noOpCall); task.Run(); Assert.IsFalse(task.Cancel(mayInterruptIfRunning)); Assert.IsTrue(task.IsDone); Assert.IsFalse(task.IsCancelled); }
public void CancelSecceedsBeforeRun([Values(true, false)] bool mayInterruptIfRunning) { FutureTask <T> task = new FutureTask <T>(_noOpCall); Assert.IsTrue(task.Cancel(mayInterruptIfRunning)); task.Run(); Assert.IsTrue(task.IsDone); Assert.IsTrue(task.IsCancelled); }
public void CancelInterruptsRunningTask() { var t = ThreadManager.GetManagedAction( delegate { Assert.Throws <ThreadInterruptedException>(() => Thread.Sleep(Delays.Medium)); }); FutureTask <T> task = new FutureTask <T>(t, default(T)); new Thread(task.Run).Start(); Thread.Sleep(Delays.Short); Assert.IsTrue(task.Cancel(true)); ThreadManager.JoinAndVerify(); Assert.IsTrue(task.IsDone); Assert.IsTrue(task.IsCancelled); }
public void GetChokesWhenTaskIsCancelled([Values(true, false)] bool isTimed) { FutureTask <T> ft = new FutureTask <T>( () => Thread.Sleep(Delays.Medium), default(T)); ThreadStart getter = () => Assert.Throws <CancellationException>( delegate { if (isTimed) { ft.GetResult(Delays.Medium); } else { ft.GetResult(); } }); ThreadManager.StartAndAssertRegistered("T", getter, ft.Run); Thread.Sleep(Delays.Short); ft.Cancel(true); ThreadManager.JoinAndVerify(); }
public void CancelDoesNotInterruptRunningTask() { var called = false; FutureTask <T> task = new FutureTask <T>( ThreadManager.GetManagedAction( delegate { Thread.Sleep(Delays.Small); called = true; }), default(T)); ThreadManager.StartAndAssertRegistered(new Thread(task.Run) { Name = "T1" }); Thread.Sleep(Delays.Short); Assert.IsTrue(task.Cancel()); ThreadManager.JoinAndVerify(); Assert.IsTrue(task.IsDone); Assert.IsTrue(task.IsCancelled); Assert.IsTrue(called); }