出于此处StaTaskScheduler所述的原因,我正在使用 Stephen Toub 。
据我了解,任务调度是Task Scheduler的职责,而awaitContinuation是Synchronization Context的职责(如有错误请指正)。
现在我想await在由StaTaskScheduler. 我应该安装自定义同步上下文,以确保代码执行将在同一个STA 线程上继续await吗?
出于此处StaTaskScheduler所述的原因,我正在使用 Stephen Toub 。
据我了解,任务调度是Task Scheduler的职责,而awaitContinuation是Synchronization Context的职责(如有错误请指正)。
现在我想await在由StaTaskScheduler. 我应该安装自定义同步上下文,以确保代码执行将在同一个STA 线程上继续await吗?
默认情况下,await将捕获当前SynchronizationContext ,除非它是null,在这种情况下,它将捕获当前TaskScheduler。
所以,答案是否定的,您不需要安装自定义SynchronizationContext. 在由 执行的任务中使用时StaTaskScheduler,await默认情况下将捕获该任务调度程序并继续执行由该任务执行的另一个任务StaTaskScheduler。
请注意,它StaTaskScheduler确实维护了STA 线程的集合,并且可以在任何这些线程上执行延续。如果这是不可接受的,则需要将其限制StaTaskScheduler为单个线程(通过传递1给其构造函数)。