没有 CancellationTokenSource 的新 CancellationToken() 和 IsCancellationRequested

Posted

技术标签:

【中文标题】没有 CancellationTokenSource 的新 CancellationToken() 和 IsCancellationRequested【英文标题】:new CancellationToken() and IsCancellationRequested without CancellationTokenSource 【发布时间】:2022-01-02 11:53:33 【问题描述】:

如果我创建一个 CancellationToken 实例,是否有任何方法可以更改 IsCancellationRequested 属性,或者我是否总是需要一个 CancellationTokenSource 实例及其 Cancel 方法?换句话说,为了正确取消任务,是使用new CancellationToken()还是应该一直使用CancellationTokenSource.Token?

如果我总是需要使用 CancellationTokenSource.Token,那么在什么情况下我可能需要单独实例化 CancellationToken? 为什么我需要做 new CancellationToken()?我什么时候可以做 CancellationToken = CancellationTokenSource.Token.

【问题讨论】:

看看这个:***.com/questions/14215784/… 很多关于这两者区别的答案,其中一个来自参与设计这些类的人。 这能回答你的问题吗? Why CancellationToken is separate from CancellationTokenSource? 不,为什么令牌可以与 CancellationTokenSource 分开存在,这里没有说。有一般用语。但没有具体细节。举一个除了 CancellationTokenSource 之外令牌有用的例子。是的,令牌不是一个类,而是一个结构。为什么我需要做 new CancellationToken()?我什么时候可以做 CancellationToken = CancellationTokenSource.Token. 【参考方案1】:

new CancellationToken() - 或等效的CancellationToken.None 产生一个永远不会被取消的取消令牌。

当您调用需要 CancellationToken 的方法时很有用,但您的代码从不打算取消任务。

【讨论】:

谢谢!换句话说,IsCancellationRequested 属性的值不能在 new CancellationToken() 中更改。并且 new CancellationToken() 可以用于需要传递 CancellationToken 的地方,但我们根本不打算取消我们的操作。我理解正确吗? 确实,IsCancellationRequested 是一个 get-only 属性。如果你愿意,你可以看看source code

以上是关于没有 CancellationTokenSource 的新 CancellationToken() 和 IsCancellationRequested的主要内容,如果未能解决你的问题,请参考以下文章

程序崩溃, 没有任何提示!没有异常!没有任何错误日志。。。

为啥 HKSample 数组对于一个没有限制、没有谓词、没有锚点的 HKAnchoredObjectQuery 总是有 1 个值?

为啥 HKSample 数组对于一个没有限制、没有谓词、没有锚点的 HKAnchoredObjectQuery 总是有 1 个值?

Eclipse C++ 问题:没有二进制文件(但没有编译器错误),没有类(但在类层次结构中没有条目)

PLSQL提示没有登录ORA-01012:没有登录

PLSQL提示没有登录ORA-01012:没有登录