gpt4 book ai didi

c# - 异步 CTP - 环境 CancellationToken 和 IProgress

转载 作者:太空狗 更新时间:2023-10-30 01:24:39 25 4
gpt4 key购买 nike

考虑到 Async CTP 通过环境 SynchronizationContext 促进隐式调度,有什么理由不让我的 CancellationTokenIProgress 环境也是?

我目前正在通过方法传递这些,就像我传递一个 TaskScheduler 以进行显式调度一样。但是,鉴于调度程序现在应该是环境调度程序,我是否可以对拼图的其他部分遵循相同的规则?

最佳答案

CancellationTokenIProgress<T> 更可能是这个的候选者.与 IProgress<T> , 你经常有不同的 T在不同级别(更高级别 async 方法结合了其较低级别 await 调用的进度通知)。与 CancellationToken ,相同的 token 几乎总是传递给较低级别​​的 async方法(假设它们支持取消)。 CancellationToken确实支持一些非常高级的组合器,但它们几乎从未被使用过。

主要缺点是您将背离基于任务的异步模式。您必须记住,任何 Microsoft 或第 3 方代码都会采用显式 CancellationToken。 - sp 你必须明确地将它从最低级别的环境上下文中拉出来 async方法。此外,以后维护您的代码库的程序员可能会期望 TAP。

在考虑实现时也存在挑战。你会想要隐式的 CancellationToken跟随 async 的调用方法,即使它们改变了线程上下文。我的意思是,考虑一下:方法 A电话 ConfigureAwait(false)在等待方法结果之前 B .您不能使用简单的线程局部静态属性,因为您需要遵循从一个线程到另一个线程的异步执行上下文。

我似乎记得读过有关执行此操作的方法(可能使用 CallContext 类?),但一旦您这样做,您的性能就会下降(执行上下文迁移代码针对默认情况进行了高度优化)。

关于c# - 异步 CTP - 环境 CancellationToken 和 IProgress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8774520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com