public void キャンセルトークンを渡しても_Cancelを呼ばなければ正常終了()
        {
            var x         = 10;
            var scheduler = Task.DefaultScheduler;

            var t = Task.Run <double>(c => Coroutines.F1Cancelable(x, 20, c, CancellationToken.None));

            while (!t.IsCompleted)
            {
                scheduler.Update();
            }

            Assert.AreEqual(Coroutines.F1(x), t.Result);
        }
Example #2
0
        public void キャンセルトークンを渡しても_Cancelを呼ばなければ正常終了()
        {
            var x      = 10;
            var runner = new SampleTaskRunner.TaskRunner();

            var t = new Task <double>(c => Coroutines.F1Cancelable(x, 20, c, CancellationToken.None));

            t.Start(runner);
            while (!t.IsCompleted)
            {
                runner.Update();
            }

            Assert.AreEqual(Coroutines.F1(x), t.Result);
        }
Example #3
0
        public void TaskにCancellationTokenSourceを渡しておいて_TaskのCancelメソッド経由でキャンセルできる()
        {
            var x      = 10;
            var runner = new SampleTaskRunner.TaskRunner();

            var cts = new CancellationTokenSource();
            var t   = new Task <double>(c => Coroutines.F1Cancelable(x, 20, c, cts.Token));

            t.Cancellation = cts;

            t.Start(runner);
            runner.Update(5);
            t.Cancel();             // Task.Cancel の中で1度 MoveNext して、即座にキャンセル処理が動くようにする

            // 挙動自体は cts.Cancel(); と同じ
            Assert.IsTrue(t.IsFaulted);
            Assert.AreEqual(typeof(TaskCanceledException), t.Error.Exceptions.Single().GetType());
        }
        public void CancellationTokenを使うバージョンのRunでタスク開始するとTask_Cancel可能()
        {
            var x         = 10;
            var scheduler = Task.DefaultScheduler;

            var cts = new CancellationTokenSource();
            var t   = Task.Run <double>((c, ct) => Coroutines.F1Cancelable(x, 20, c, ct), cts);

            scheduler.Update(5);
            t.Cancel();

            // 次の1回の実行でタスクが終わるはず
            scheduler.Update();

            // この場合は IsCanceled にならない
            Assert.IsTrue(t.IsFaulted);
            Assert.AreEqual(typeof(TaskCanceledException), t.Exception.Exceptions.Single().GetType());
        }
        public void キャンセルしたときにOperationCanceld例外発生()
        {
            var x         = 10;
            var scheduler = Task.DefaultScheduler;

            var cts = new CancellationTokenSource();
            var t   = Task.Run <double>(c => Coroutines.F1Cancelable(x, 20, c, cts.Token));

            scheduler.Update(5);
            cts.Cancel();

            // 次の1回の実行でタスクが終わるはず
            scheduler.Update();

            // この場合は IsCanceled にならない
            Assert.IsTrue(t.IsFaulted);
            Assert.AreEqual(typeof(TaskCanceledException), t.Exception.Exceptions.Single().GetType());
        }
Example #6
0
        public void キャンセルしたときにOperationCanceld例外発生()
        {
            var x      = 10;
            var runner = new SampleTaskRunner.TaskRunner();

            var cts = new CancellationTokenSource();
            var t   = new Task <double>(c => Coroutines.F1Cancelable(x, 20, c, cts.Token));

            t.Start(runner);
            runner.Update(5);
            cts.Cancel();

            // 次の1回の実行でタスクが終わるはず
            runner.Update();

            // この場合は IsCanceled にならない
            Assert.IsTrue(t.IsFaulted);
            Assert.AreEqual(typeof(TaskCanceledException), t.Error.Exceptions.Single().GetType());
        }
Example #7
0
        public void TaskのForceCancelで強制的にタスクを止めたときはOnCompleteも呼ばれない()
        {
            var x      = 10;
            var runner = new SampleTaskRunner.TaskRunner();

            var cts = new CancellationTokenSource();
            var t   = new Task <double>(c => Coroutines.F1Cancelable(x, 20, c, cts.Token));

            t.OnComplete(_ =>
            {
                Assert.Fail();
            });

            t.Start(runner);
            runner.Update(5);
            t.ForceCancel();

            runner.Update();

            // この場合は IsCanceled に
            Assert.IsTrue(t.IsCanceled);
        }