Можно ли создать задачу, не запустив ее, чтобы я мог ограничить максимальную параллелизм?C#

Место общения программистов C#
Ответить
Anonymous
 Можно ли создать задачу, не запустив ее, чтобы я мог ограничить максимальную параллелизм?

Сообщение Anonymous »

У меня странный сценарий. У меня есть список групп. Для каждой группы мне нужно начать задачу для всего содержимого, но мне нужно убедиться, что последнее значение в каждой группе запускается последним. Упрощенная функция ниже: < /p>

Код: Выделить всё

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 
содержал список задач, которые еще не начались. Тогда я мог бы просто сделать что -то вроде: < /p>

Код: Выделить всё

Parallel.ForEach(allTasks, new ParallelOptions {MaxDegreeOfParallelism = 10},
aTask =>
{
aTask.Start();
});
Есть ли способ сделать что -то подобное?

Подробнее здесь: https://stackoverflow.com/questions/795 ... x-concurre
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»