Учитывая, что у меня есть 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);
}
Мне интересно, есть ли лучший способ сделать это?Может быть, метод уже доступен?
Спасибо