嗨我在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);
有没有更好的方法可以并行运行这些任务?我正在考虑每个循环的并行,但因为循环的迭代次数不固定,我不认为我可以为每个循环使用并行
代码不一定有问题。但是,如果我输入了10,000个项目,则大约需要18分钟,我在想是否可以并行运行任务,它可能会更快地返回。如果输入10,000个项目,则批次数将为10,000 / 25 = 400
MyMethod中的执行代码调用第三方外部服务,根据用户输入的数据返回数据
答案 0 :(得分:2)
并行处理列表是最简单的并行算法:
ParallelEnumerable.Range(0, numOfBatches)
.Select(_ => MyMethod(variableA, variableB))
.ToList();
创建无限数量的任务是一种代码气味,因为这会导致资源耗尽,而且代码也很笨拙。