C# Task 取消

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

作者: jamesbing
提示: 欢迎转载,但是必须保留本文的署名 jamesbing (包含链接)
原文地址:https://www.cnblogs.com/gaobing/p/15083846.html