1.可在创建Task时将一个CancellationToken传给构造器,从而将两者相关联,如果CancellationToken在Task调度前取消,那么Task就会被取消,永远都不执行。 2.但如果Task已调度,那么Task的代码就只支持显示取消,其操作才能在执行期间取消,遗憾的是,虽然Task关联了一个CancellationToken,但却没有办法访问他。
class Program { static async Task Main(string[] args) { var cancelSource = new CancellationTokenSource(5000); //任务取消后执行 cancelSource.Token.Register(() => { Console.WriteLine("Task is Cancel!"); }); await Task.Run(async () => { await Task.Delay(6000); var t = Task.Factory.StartNew(_ => { while (true) { if (cancelSource.IsCancellationRequested) { Console.WriteLine("任务已取消!"); break; } Thread.Sleep(1000); Console.WriteLine("Hello World!"); } }, cancelSource.Token); await t; }); Console.ReadKey(); } }
参考:https://www.cnblogs.com/mohanchen/p/9398031.html