异步执行限制并发实例的数量

时间:2012-09-10 13:17:35

标签: multithreading c#-4.0

我有一个简单的集合,我正在循环这样:

foreach (MyObject mo in myObjects)
{
   myObject.RunAcync();
}

RunAsync使用new Thread(()=>{ .. }).Start()在单独的线程中执行代码,我无权更改RunAsync的代码。我需要将同时运行的myObject的实例数限制为N(实数为2..10)。使用.NET4c#

的有效方法是什么?

1 个答案:

答案 0 :(得分:0)

如果您可以修改RunAsync,使用我们现在拥有的(.NET 4)和即将发生的事情(现在当您考虑它时,.NET 4.5),我将使用任务并行库(TPL)和从Task返回某种RunAsync对象。然后,您可以轻松地告知已完成的操作和正在运行的内容,并使用内置的TPL负载平衡来限制正在运行的任务的数量。或者,如果您有该方法的非异步版本,您也可以使用TPL的Parallel.ForEach来调用该方法,它将处理负载平衡并且一次只运行足够的方法以避免性能问题