1 回答
TA贡献1876条经验 获得超6个赞
有很多方法可以做到这一点,但我可能会使用一些提供更高级别抽象的库或框架,例如 TPL 数据流。
这比构建您自己的缓冲机制要容易得多。下面是一个非常简单的示例,但您可以对其进行不同的配置,并使用该库执行更多操作。在下面的示例中,我没有对它们进行批处理,但我确保同时处理的任务不超过 10 个。
我有一组 100 个任务需要以任意顺序运行。将它们全部放入往往Task.WhenAll()会使后端超载,这是我无法控制的。
我想一次运行 n 个任务,每个任务完成后,然后运行下一组。我编写了这段代码,但是在任务运行后,“控制台(正在运行...”)被打印到屏幕上,这让我认为所有任务都正在运行。
如何强制系统真正“等待”每组任务?
//Run some X at a time
int howManytoRunAtATimeSoWeDontOverload = 4;
for(int i = 0; i < tasks.Count; i++)
{
var startIndex = howManytoRunAtATimeSoWeDontOverload * i;
Console.WriteLine($"Running {startIndex} to {startIndex+ howManytoRunAtATimeSoWeDontOverload}");
var toDo = tasks.Skip(startIndex).Take(howManytoRunAtATimeSoWeDontOverload).ToArray();
if (toDo.Length == 0) break;
await Task.WhenAll(toDo);
}
屏幕输出:
- 1 回答
- 0 关注
- 90 浏览
添加回答
举报