我正在寻找一个解释为什么.NET引入了CancellationToken
结构体,除了CancellationTokenSource
类。 我理解如何使用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 变量就足够了,我仍然看不出为什么这样会更快。
谢谢!