C#任务工厂

本文关键字:工厂 任务 | 更新日期: 2023-09-27 18:29:19

嗨,我在for循环中有下面这样的代码。它处于for循环中,因为它需要运行的次数可能因用户添加的项目数量而异。

var taskList = new List<Task<IEnumerable<MyObject>>>();
for (int i = 0; i < numOfBatches; i++)
{
    var task = Task.Factory.StartNew(() => MyMethod(variableA, variableB));
    taskList.Add(task);
}
//Wait for all the tasks to complete 
Task.WaitAll(taskList.Cast<Task>().ToArray());
return taskList.SelectMany(x => x.Result);

有没有更好的方法可以并行运行这些任务?我想为每个循环使用并行,但由于循环的迭代次数不是固定的,我不认为我可以为每个使用并行

代码不一定有问题。然而,如果我输入了10000个项目,大约需要18分钟,我想如果我可以并行运行任务,它可能会更快地返回。如果输入10000个项目,批次数将为10000/25=400

MyMethod中的实际代码调用第三方外部服务,根据用户输入的数据返回数据

C#任务工厂

并行处理列表是最简单的并行算法:

ParallelEnumerable.Range(0, numOfBatches)
.Select(_ => MyMethod(variableA, variableB))
.ToList();

创建无限数量的任务是一种代码气味,因为这可能导致资源耗尽,而且代码很笨拙。