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

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

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

【问题讨论】:

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

标签: c# .net cancellationtokensource cancellation-token


【解决方案1】:

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

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

【讨论】:

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