Ejemplo n.º 1
0
        public void TaskScheduler_Shutdownで登録済みのタスクの終了待ちできる()
        {
            var scheduler = new TaskScheduler();
            var skipScheduler = new TaskScheduler();
            List<Task> tasks = new List<Task>();

            for (int i = 0; i < 100; i++)
            {
                var t = Util.RandomTask(scheduler, skipScheduler);
                tasks.Add(t);
                scheduler.Update();
                skipScheduler.Update();
            }

            // RandomTask と WaitShutdown の実装上、5秒も待てば終わるはず
            var s = scheduler.BeginShutdown(TimeSpan.FromSeconds(10));

            while (true)
            {
                if (s.IsFaulted || s.IsCompleted || s.IsCanceled) break;
                for (int i = 0; i < 50; i++) scheduler.Update();
                for (int i = 0; i < 5; i++) skipScheduler.Update();
                System.Threading.Thread.Sleep(1);
            }

            Assert.AreEqual(TaskSchedulerStatus.ShutdownCompleted, scheduler.Status);

            foreach (var t in tasks)
            {
                Assert.AreEqual(TaskStatus.RanToCompletion, t.Status);
            }
        }
Ejemplo n.º 2
0
        public void TaskSchedulerのシャットダウンにはタイムアウトを設定できる()
        {
            var scheduler = new TaskScheduler();

            Util.Delay(50, scheduler);

            // 50ミリ秒のDelayは100ミリ秒も待てば終わるはず。
            scheduler.BeginShutdown(TimeSpan.FromMilliseconds(100)).Wait();

            Assert.AreEqual(TaskSchedulerStatus.ShutdownCompleted, scheduler.Status);

            scheduler = new TaskScheduler();

            Util.Delay(200, scheduler);

            // 100ミリ秒のDelayは50ミリ秒で終わらずタイムアウトするはず。
            scheduler.BeginShutdown(TimeSpan.FromMilliseconds(50)).Wait();

            Assert.AreEqual(TaskSchedulerStatus.ShutdownTimeout, scheduler.Status);
        }
Ejemplo n.º 3
0
        public void TaskSchedulerのシャットダウンにはタイムアウトを設定できる()
        {
            var scheduler = new TaskScheduler();

            Util.Delay(50, scheduler);

            // 50ミリ秒のDelayは100ミリ秒も待てば終わるはず。
            scheduler.BeginShutdown(TimeSpan.FromMilliseconds(100)).Wait();

            Assert.AreEqual(TaskSchedulerStatus.ShutdownCompleted, scheduler.Status);

            scheduler = new TaskScheduler();

            Util.Delay(200, scheduler);

            // 100ミリ秒のDelayは50ミリ秒で終わらずタイムアウトするはず。
            scheduler.BeginShutdown(TimeSpan.FromMilliseconds(50)).Wait();

            Assert.AreEqual(TaskSchedulerStatus.ShutdownTimeout, scheduler.Status);
        }
Ejemplo n.º 4
0
        public void TaskScheduler_Shutdownで登録済みのタスクの終了待ちできる()
        {
            var         scheduler     = new TaskScheduler();
            var         skipScheduler = new TaskScheduler();
            List <Task> tasks         = new List <Task>();

            for (int i = 0; i < 100; i++)
            {
                var t = Util.RandomTask(scheduler, skipScheduler);
                tasks.Add(t);
                scheduler.Update();
                skipScheduler.Update();
            }

            // RandomTask と WaitShutdown の実装上、5秒も待てば終わるはず
            var s = scheduler.BeginShutdown(TimeSpan.FromSeconds(10));

            while (true)
            {
                if (s.IsFaulted || s.IsCompleted || s.IsCanceled)
                {
                    break;
                }
                for (int i = 0; i < 50; i++)
                {
                    scheduler.Update();
                }
                for (int i = 0; i < 5; i++)
                {
                    skipScheduler.Update();
                }
                System.Threading.Thread.Sleep(1);
            }

            Assert.AreEqual(TaskSchedulerStatus.ShutdownCompleted, scheduler.Status);

            foreach (var t in tasks)
            {
                Assert.AreEqual(TaskStatus.RanToCompletion, t.Status);
            }
        }