的时候触发.取消方法可以被请求取消的任务忽略

本文关键字:取消 请求 任务 候触发 方法 | 更新日期: 2023-09-27 18:16:01

所以我正在书中阅读,我已经通过CancellationTokenSource的任务,即使我在令牌上调用cancel也可以忽略它?怎么啦?这是真的吗?我希望不是。MSDN中找不到任何明确的内容。

它完全使取消令牌对我无用,我会坚持我的线程。中止。

的时候触发.取消方法可以被请求取消的任务忽略

是真的。要使用CancellationTokenSource,你的Task必须知道它。

例如,下面的代码知道CancellationToken,因为它调用了令牌实例的ThrowIfCancellationRequested()方法:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts.Token);
...
public void SomeCancellableOperation(CancellationToken token) {
    ...
    token.ThrowIfCancellationRequested();
    ...
}

我在这个问题中找到了前面提到的代码片段和一些关于它的澄清。

是。正如文档中所说,CancellationToken用于合作取消。

由任务内的代码决定如何处理请求取消的信息。它可以忽略它,也可以等待一个适当的点,并在请求取消时抛出OperationCanceledException。这里提供了一个帮助方法来完成这个任务:

CancellationToken.ThrowIfCancellationRequested()

这比仅仅杀死一个线程要好得多(尽管,作为题外话,Task != Thread)。看看这个问题,为什么Thread.Abort是一个坏主意。