C# 使用CancellationTokenSource 取消Task执行

本文介绍如何使用CancellationTokenSource在C#中取消异步任务的执行,提供了一个示例,展示了如何注册任务被取消的处理方法,并在9秒后手动取消一个运行中的Task。

写在前面

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

执行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值