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