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