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中的实际代码调用第三方外部服务,根据用户输入的数据返回数据
并行处理列表是最简单的并行算法:
ParallelEnumerable.Range(0, numOfBatches)
.Select(_ => MyMethod(variableA, variableB))
.ToList();
创建无限数量的任务是一种代码气味,因为这可能导致资源耗尽,而且代码很笨拙。