Код: Выделить всё
public async Task DoAllTheWork(IEnumerable groups)
{
var allTasks = new List();
foreach (var group in groups)
{
var tasksInGroup = new List();
var values = group.ToList();
// start tasks for all except last value
foreach (var value in values.SkipLast(1))
{
var theTask = SomeAsyncFunction(value);
allTasks.Add(theTask);
tasksInGroup.Add(theTask);
}
// start a task for last value once all previous tasks are done
var lastTask = Task.Run(async () =>
{
await Task.WhenAll(tasksInGroup);
SomeAsyncFunction(values.Last());
});
allTasks.Add(lastTask);
}
await Task.WhenAll(allTasks);
}
< /code>
Это работает нормально. Проблема в том, что все задачи выполняются одновременно, что может оказаться проблемой, если слишком много групп или в группах слишком много значений. < /P>
Я хотел бы ограничить выполнение одновременных задач. Самый простой способ, о котором я могу придумать, это то, что если Alltasks Код: Выделить всё
Parallel.ForEach(allTasks, new ParallelOptions {MaxDegreeOfParallelism = 10},
aTask =>
{
aTask.Start();
});
Подробнее здесь: https://stackoverflow.com/questions/795 ... x-concurre
Мобильная версия