繁体   English   中英

CancellationTokenSource.Cancel方法请求取消的任务可以忽略

[英]CancellationTokenSource.Cancel Method Can be ignored by the task cancellation is requested

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

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

是的,它是真的。 要使用CancellationTokenSource,您的任务必须知道它。

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

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

在这个问题中,我已经找到了上述代码片段以及对其的一些说明。

是。 文档中所述CancellationToken用于合作取消。

任务中的代码决定如何处理已请求取消的信息。 它可以忽略它,也可以等待适当的时间点并在请求取消的情况下抛出OperationCanceledException 提供了一个可以完全做到这一点的辅助方法:

CancellationToken.ThrowIfCancellationRequested()

这比仅杀死一个线程要好得多(尽管顺便说一句, Task != Thread )。 看到这个问题的原因有很多,为什么Thread.Abort是一个坏主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM