Questions tagged «cancellation-token»

4
任务构造器中的取消令牌:为什么?
某些System.Threading.Tasks.Task构造函数将a CancellationToken作为参数: CancellationTokenSource source = new CancellationTokenSource(); Task t = new Task (/* method */, source.Token); 令我感到困惑的是,没有办法从方法主体内部真正获取传入的令牌(例如,没有类似的东西Task.CurrentTask.CancellationToken)。令牌必须通过某种其他机制提供,例如状态对象或在lambda中捕获。 那么在构造函数中提供取消令牌有什么目的呢?

5
为什么CancellationToken与CancellationTokenSource分开?
我正在寻找为什么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,对于每个令牌,取消检查是本地访问? 鉴于在两种情况下没有锁定的挥发性布尔变量就足够了,我仍然不明白为什么这样做会更快。 谢谢!

6
CancellationToken的默认参数
我有一些要添加的异步代码CancellationToken。但是,在许多实现中都不需要这样做,因此我想有一个默认参数-也许CancellationToken.None。然而, Task<x> DoStuff(...., CancellationToken ct = null) 产量 不能将类型“”的值用作默认参数,因为没有对“ System.Threading.CancellationToken”类型的标准转换 和 Task<x> DoStuff(...., CancellationToken ct = CancellationToken.None) “ ct”的默认参数值必须是编译时常量 有什么办法可以为其设置默认值CancellationToken吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.