c# – 取消任务
我尝试在取消下面的任务时运行一个简单的例子
CancellationTokenSource tokenSource2 = new CancellationTokenSource(); CancellationToken token2 = tokenSource2.Token; Task task2 = new Task(() => { for (int i = 0; i < int.MaxValue; i++) { token2.ThrowIfCancellationRequested(); Thread.Sleep(100); Console.WriteLine("Task 2 - Int value {0}",i); } },token2); task2.Start(); Console.WriteLine("Press any key to cancel the task"); Console.ReadLine(); tokenSource2.Cancel(); Console.WriteLine("Task 2 cancelled? {0}",task2.IsCanceled); 我期望Console.WriteLine(“任务2取消?{0}”,task2.IsCanceled);将打印**“任务2取消?真”**,但它打印“假”. 你知道发生了什么吗?这是预期的行为吗?谢谢. 编辑:确保在调用取消请求之前未完成任务.我添加了Console.ReadLine(). 解决方法
首先,也许你误解了IsCanceled的意思?这并不意味着“此任务正在等待取消,因此它应该很快完成”,这意味着“此任务已被取消,现在已完成”.
如果你没有误解,请考虑事件的顺序是什么.这是怎么回事: >调用ThrowIfCancellationRequested(),但令牌尚未取消,因此它不会抛出. 这就是为什么ISCanceled会向您返回false.如果你想让它返回true,你可以在检查IsCanceled之前添加类似Thread.Sleep(150)的东西,或者更好的是,实际上等待Task完成. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |