C# 使用CancellationTokenSource 取消Task执行

2023-12-16 14:20:07

写在前面

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

执行结果

文章来源:https://blog.csdn.net/rjcql/article/details/134914767
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。