我目前正在开发一个在整个过程中都使用 TAP 的异步应用程序。每个具有Task
生成 s 的方法的类也都有一个TaskScheduler
注入方法。这使我们能够执行明确的任务调度,据我所知,这不是微软使用 Async CTP 的方式。
我对新方法(隐式调度)的唯一问题是我们以前的理念一直是“我们知道延续将始终指定他们的任务调度程序,所以我们不需要担心我们在什么上下文中完成任务” .
摆脱这一点确实让我们有些担心,因为它在避免细微的线程错误方面工作得非常好,因为对于每一段代码,我们可以看到编码人员已经记住考虑他在哪个线程上。如果他们错过了指定任务调度程序,这是一个错误。
问题 1:谁能向我保证隐式方法是个好主意?我看到 ConfigureAwait(false) 和遗留/第三方代码中的显式调度引入了很多问题。例如,如何确定我的“等待缠身”代码始终在 UI 线程上运行?
问题 2:那么,假设我们TaskScheduler
从代码中删除所有 DI 并开始使用隐式调度,那么我们如何设置默认任务调度程序?如果在方法中途更改调度程序,就在等待一个昂贵的方法之前,然后再将其设置回来呢?
(ps 我已经阅读了http://msmvps.com/blogs/jon_skeet/archive/2010/11/02/configuring-waiting.aspx)