c# - 异步/等待、ThreadPool 和 SetApartmentState

标签 c# .net multithreading com async-await

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

如何在这种情况下仍然使用async/await?使用自定义任务调度程序创建我自己的 STA 线程池听起来像是一项繁重的工作。

最佳答案

Stephen Toub 已经写了一个 StaTaskScheduler ( archive );我建议您使用它。

然后您可以使用该 TaskScheduler 构造一个 TaskFactoryTaskFactory 类型上没有与 Task.Run 等效的项,但您可以轻松创建一个 using StartNew and Unwrap .

关于c# - 异步/等待、ThreadPool 和 SetApartmentState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19648620/

相关文章:

c# - C++和C#之间HRESULT的转换

c# - www.text 在 Unity3D (C#) 中返回奇怪的值

c# - 在运行时在 NLog 中设置 Logger 的 writeTo 属性

C# 异步套接字 - 线程逻辑

c# - 从不同的线程调用相同的方法

c# - 使用 CommunityToolkit.Mvvm 处理可观察对象属性

c# - Entity Framework 我的 AddOrUpdate 函数在哪里?

javascript - 使用数据进行 AJAX 后调用

c# - 无法在 asp.net 报表查看器中查看 SQL Server 移动报表

multithreading - F# 线程中的取消标记