我有一个 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/