ThreadPool.QueueUserWorkItem仅使用3个核心中的1个

时间:2014-03-07 15:21:28

标签: c# asp.net threadpool

我长时间调用通过ThreadPool.QueueUserWorkItem调用的ASP.NET应用程序中的Web服务。该呼叫大约需要2分钟才能完成,并将大约2000条记录发送到外部数据存储。一切似乎都在顺利运行,除了我注意到当在运行IIS7的生产环境中进行这些调用时,只使用了1个CPU内核,并且它已经达到最大值。如何在所有可用CPU核心之间平衡工作负载?

1 个答案:

答案 0 :(得分:4)

假设您使用的是.Net 4.0 +

如果你有2000条记录并且需要对某种服务进行2000次相关调用,你可以使用这种方法:

List<RecordType> records = GetMyRecords();
Parallel.ForEach(records, record => {
    MakeMyServiceCall(record);
});

这将并行地为每个单独的记录运行MakeMyServiceCall方法;并行库使用幕后的ThreadPool线程,这些线程将透明地分配可用内核上的负载。