【发布时间】:2019-02-22 06:53:16
【问题描述】:
鉴于我有一个IEnumerable<Func<Task>> 来生成一些我想要并发执行的(爬虫)任务,我该如何设置并发的上限?
例如,我不希望超过 5 个这些任务同时运行。另一方面,如果可能,应该始终运行 5 个任务。
我目前的方法是这段代码:
public static async Task ExecuteConcurrent(IEnumerable<Func<Task>> taskGenerators, int maxDegreeOfConcurrency)
{
var executingTasks = new HashSet<Task>();
foreach (var taskGenerator in taskGenerators) {
while (executingTasks.Count >= maxDegreeOfConcurrency) {
executingTasks.Remove(await Task.WhenAny(executingTasks));
}
executingTasks.Add(taskGenerator());
}
await Task.WhenAll(executingTasks);
}
我想知道是否有更好的方法来做到这一点?也许,已经有可用的方法了?
谢谢
【问题讨论】:
标签: c# concurrency task