我使用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
传递给其构造函数)。