我使用Stephen Toub的 StaTaskScheduler 的原因是here

据我了解,任务调度是任务调度程序的责任,而await延续是同步上下文的责任(如果我错了,请纠正我)。

现在,我想在由await创建的STA线程之一上运行的任务代码中使用StaTaskScheduler。我是否应该安装自定义同步上下文,以确保在await之后在同一STA线程上继续执行代码?

最佳答案

我在intro to await blog post中介绍了async行为。

默认情况下,await将捕获当前的SynchronizationContext,除非它是null,在这种情况下,它将捕获当前的TaskScheduler

因此,答案是否定的,您无需安装自定义SynchronizationContext。在StaTaskScheduler执行的任务中使用时,默认情况下await将捕获该任务调度程序,并在该StaTaskScheduler执行的另一个任务上继续执行。

注意StaTaskScheduler确实维护了STA线程的集合,并且延续可以在那些线程中的任何一个上执行。如果这是 Not Acceptable ,则需要将StaTaskScheduler限制为单个线程(通过将1传递给其构造函数)。

10-04 13:48