c# - ThreadPool.QueueUserWorkItem 具有任意数量的线程

标签 c# multithreading

我有一个 ConcurrentQueue,其中填充了任意数量的对象,我想在单独的线程中处理这些对象。

如何等待所有排队的工作项目完成?我看到的示例使用固定的 ManualResetEvents 数组,然后使用 WaitHandle.WaitAll 让它们全部完成。

我需要管理线程数吗?我怎样才能让它们一直排队,让 ThreadPool 处理有多少正在运行?队列中将有数以万计的对象。

foreach (object A in myCollection)
{
    ThreadPool.QueueUserWorkItem(A.process());
}
// now wait for all threads to finish

或者我是否必须跟踪列表中的所有 ManualResetEvents 或类似的东西,然后 WaitAll 让它们全部报告完成?

最佳答案

您不应该简单地对工作项进行排队,而应该使用任务库 (System.Threading.Tasks),它为您提供更多功能,包括可替换的调度程序。

关于c# - ThreadPool.QueueUserWorkItem 具有任意数量的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8311842/

相关文章:

c# - 使用基础和MVVM通信在构造函数处进行C#继承

c# - BindingList<T> 其中 T 是实现其他接口(interface)的接口(interface)

javascript - 发生错误时显示的警报框

c# - 点聚类算法

Python 多处理 - 无法加入当前线程

java - 这些方法是线程安全的吗?

c# - 分析 .net 多线程应用程序 (Visual Studio 2008)

c# - .Net 类中的代码是否总是在创建它的线程上运行?

c# - Unity Terrain 游戏对象与自定义地形

multithreading - 多线程BIOS