我有一个简单的集合,我正在循环这样:
foreach (MyObject mo in myObjects)
{
myObject.RunAcync();
}
RunAsync
使用new Thread(()=>{ .. }).Start()
在单独的线程中执行代码,我无权更改RunAsync
的代码。我需要将同时运行的myObject
的实例数限制为N(实数为2..10)。使用.NET4
和c#
?
答案 0 :(得分:0)
如果您可以修改RunAsync
,使用我们现在拥有的(.NET 4)和即将发生的事情(现在当您考虑它时,.NET 4.5),我将使用任务并行库(TPL)和从Task
返回某种RunAsync
对象。然后,您可以轻松地告知已完成的操作和正在运行的内容,并使用内置的TPL负载平衡来限制正在运行的任务的数量。或者,如果您有该方法的非异步版本,您也可以使用TPL的Parallel.ForEach来调用该方法,它将处理负载平衡并且一次只运行足够的方法以避免性能问题