C# 以动态方式启动任务

C# 以动态方式启动任务,c#,asynchronous,task-parallel-library,C#,Asynchronous,Task Parallel Library,我有一个列表 还有一种扩展到someObject的方法,称为Process 考虑以下几点 private void processList(List<someObject> list) { Task.Factory.StartNew(() =>{ foreach(var instance in list) { instance.Process(); }}); } private void进程列表(列表) { Task.Factory

我有一个
列表
还有一种扩展到
someObject
的方法,称为
Process

考虑以下几点

private void processList(List<someObject> list)
{
  Task.Factory.StartNew(() =>{
    foreach(var instance in list)
    {
        instance.Process();
    }});
}
private void进程列表(列表)
{
Task.Factory.StartNew(()=>{
foreach(列表中的var实例)
{
Process();
}});
}
但是我想让多个
任务
s在同一个列表上工作,为了避免锁定,我克隆了列表并将其分为两个列表,然后启动了两个单独的
任务
s进行处理,速度几乎翻了一番

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

你可以使用TPL的方法

var list=newlist();
Parallel.ForEach(列表,实例=>
{
Process();
});

但是什么决定了线程的数量?假设我想把它们限制在4@user1492051您可以传递
ParallelOptions po=newparalleloptions(){maxdegreeofpparallelism=4}到foreach方法。请记住,Parallel.foreach方法会阻止调用线程,直到处理完所有元素。
var list = new List<SomeClass>();
Parallel.ForEach(list, instance =>
{
    instance.Process();
});