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