我在找理由。除了 CancellationTokenSource
类之外,还引入了 NET CancellationToken
结构。我了解 怎么做的 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
,而对于每个令牌,取消检查是一个本地字段访问?
考虑到在这两种情况下没有锁定的易失性 bool 就足够了,我仍然不明白为什么这样做会更快。
谢谢!