我想使用 await Task.Run(DoWork)
,在 ThreadPool 上做一些重复的单线程计算工作。问题是,我需要在 DoWork
中使用 STA COM 对象,所以我想我不能使用 ThreadPool,因为我不能改变池线程的单元状态。
如何在这种情况下仍然使用async
/await
?使用自定义任务调度程序创建我自己的 STA 线程池听起来像是一项繁重的工作。
最佳答案
Stephen Toub 已经写了一个 StaTaskScheduler
( archive );我建议您使用它。
然后您可以使用该 TaskScheduler
构造一个 TaskFactory
。 TaskFactory
类型上没有与 Task.Run
等效的项,但您可以轻松创建一个 using StartNew
and Unwrap
.
关于c# - 异步/等待、ThreadPool 和 SetApartmentState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19648620/