CancellationTokenSource.Cancel方法可以通过请求任务取消来忽略

时间:2015-10-05 15:43:29

标签: c# multithreading

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

它完全使取消令牌对我没用,我会坚持使用我的thread.abort然后。

2 个答案:

答案 0 :(得分:1)

是的,这是真的。要使用CancellationTokenSource,您的任务必须了解它。

例如,以下代码知道CancellationToken,因为它调用了令牌实例的ThrowIfCancellationRequested()方法:

var cts = new CancellationTokenSource();
SomeCancellableOperation(cts.Token);
...
public void SomeCancellableOperation(CancellationToken token) {
    ...
    token.ThrowIfCancellationRequested();
    ...
}

我找到了上述代码片段及其中的一些说明in this question

答案 1 :(得分:1)

是。正如in the documentation所述,CancellationToken用于合作取消。

任务中的代码决定如何处理已请求取消的信息。它可以忽略它,或者它可以等待适当的点并在请求取消时抛出OperationCanceledException。提供了一个帮助方法就是这样:

CancellationToken.ThrowIfCancellationRequested()

这比杀死一个线程更好(但是,除了Task != Thread之外)。请参阅this question,了解为什么Thread.Abort不是一个好主意。