Async/wait, ThreadPool и SetApartmentState
Я хотел бы использовать await Task.Run(DoWork)
, чтобы выполнить некоторую повторяющуюся однопотоковую вычислительную работу над ThreadPool. Проблема в том, что мне нужно использовать объекты STA COM внутри DoWork
, поэтому, я думаю, я не могу использовать ThreadPool, потому что я не могу изменить состояние квартиры в потоке пула.
Как я могу использовать async
/await
в этом сценарии? Создание собственного пула потоков STA с настраиваемым планировщиком задач звучит как чрезмерная работа.
Ответы
Ответ 1
Stephen Toub уже написал StaTaskScheduler
; Я рекомендую вам использовать это.
Затем вы можете построить TaskFactory
, используя TaskScheduler
. В TaskFactory
нет эквивалента Task.Run
, но вы можете легко создать с помощью StartNew
и Unwrap
.