Async/await,ThreadPool和SetApartmentState

avo*_*avo 12 .net c# com multithreading async-await

我想使用await Task.Run(DoWork),在ThreadPool上做一些重复的单线程计算工作.问题是,我需要在里面使用STA COM对象DoWork,所以我想我不能使用ThreadPool因为我不能改变池线程的公寓状态.

我怎样才能在这种情况下使用async/ await?使用自定义任务调度程序创建自己的STA线程池听起来像是一项过度的工作.

Ste*_*ary 15

Stephen Toub 已经写过了StaTaskScheduler ; 我建议你使用它.

然后,您可以TaskFactory使用它构建一个TaskScheduler.没有相应Task.RunTaskFactory类型,但你可以轻松创建一个使用StartNewUnwrap.