Tag: 消除

为什么CancellationToken与CancellationTokenSource分开?

我正在寻找为什么除CancellationTokenSource类之外还引入了.NET CancellationToken结构的基本原理。 我理解如何使用API​​,但也想明白为什么要这样devise。 也就是说,为什么我们有: 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可以跟踪和更新CancellationToken,并且对于每个令牌,取消检查是本地字段访问? 在这两种情况下,如果一个不locking的volatile BOOL就足够了,我还是不明白为什么会更快。 谢谢!