Ответ 1
Что вы подразумеваете под "началом их параллельно"? Когда вы запускаете Task
, он выполняется в другом потоке, поэтому вы, вероятно, имеете в виду просто:
foreach(var task in myTaskList)
{
task.Start();
}
Но если у вас есть так много из них, что вы хотите переместить исходную логику в другой поток, вы можете либо вызвать вышеуказанный код в другой поток/задачу (я использую List<T>.ForEach
для более короткого кода).
Task.Factory.StartNew(() => myTaskList.ForEach(task => task.Start()));
Или вы можете использовать TPL Parallel.ForEach
. Это все равно блокирует исполняемый поток до тех пор, пока не будут запущены все Задачи, но он выполнит действие запуска во внутреннем потоковом пуле, поэтому для большого количества элементов и некоторых свободных ядер или потоков ЦП он может значительно ускорить запуск.
Parallel.ForEach(myTaskList, task => task.Start());