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