写在前面
在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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。