寫在前面
在Task創建并執行后,如果狀態發生了變化,需要取消正在執行中的Task,除了使用主線程上的共享變量來判斷之外,更優雅的方式就是就是用CancellationTokenSource來取消任務的執行。
代碼實現
public static void CancelTaskTest01(){var source = new CancellationTokenSource();// 注冊Task被取消后的處理方法source.Token.Register(() => {Console.WriteLine("通知 task01 被取消了");});var counter = 1;var task01 = new Task(() => {while (!source.IsCancellationRequested){Thread.Sleep(2000);Console.WriteLine($"第{counter++}次");}if (source.IsCancellationRequested){Console.WriteLine($"第{counter}次真正結束");}});task01.Start();// 9秒后取消task01,由于第5次執行的時候已經通過了判斷,所以事實上是第6次才被取消source.CancelAfter(9000);}
執行結果