以动态方式启动任务

FPG*_*PGA 5 c# asynchronous task-parallel-library

我有一个List<someObject> 和一个扩展方法来someObject调用Process.

考虑以下

private void processList(List<someObject> list)
{
  Task.Factory.StartNew(() =>{
    foreach(var instance in list)
    {
        instance.Process();
    }});
}
Run Code Online (Sandbox Code Playgroud)

但我希望多个Tasks在同一个列表上工作,以避免锁定我克隆列表并将其分成2个列表,然后启动2个单独的Tasks来处理,速度几乎加倍.

我想知道.NET中是否有内置功能可以帮助我以动态的方式和更清晰的语法实现这些功能?

L.B*_*L.B 7

您可以使用TPL的Parallel.Foreach方法

var list = new List<SomeClass>();
Parallel.ForEach(list, instance =>
{
    instance.Process();
});
Run Code Online (Sandbox Code Playgroud)

  • @ user1492051你可以通过`ParallelOptions po = new ParallelOptions(){MaxDegreeOfParallelism = 4};`来传递foreach方法. (2认同)