Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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();
        }
Exemple #5
0
        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);
        }