CancellationToken
我正在寻找除了CancellationTokenSource
类之外还引入.NET 结构的理由。我了解如何使用 API,但也想了解为什么要这样设计。
即,为什么我们有:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts.Token);
...
public void SomeCancellableOperation(CancellationToken token) {
...
token.ThrowIfCancellationRequested();
...
}
而不是像这样直接传递CancellationTokenSource
:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts);
...
public void SomeCancellableOperation(CancellationTokenSource cts) {
...
cts.ThrowIfCancellationRequested();
...
}
这是基于取消状态检查比传递令牌更频繁发生的事实的性能优化吗?
这样就CancellationTokenSource
可以跟踪和更新CancellationTokens
,并且对于每个令牌,取消检查都是本地字段访问?
鉴于在这两种情况下没有锁定的 volatile bool 就足够了,我仍然不明白为什么会更快。
谢谢!