Я пытаюсь запланировать вызов функции для последовательности элементов с использованием параллельной библиотеки задач.
Следующее не работает
List<Task> tasks = new List<Task>();
foreach(var someValue in aCollection)
{
var t = Task.Factory.StartNew(() => DoSomeWork(someValue));
tasks.Add(t);
}
Task.WaitAll(tasks.ToArray());
Но ниже работает
Task.WaitAll(aCollection.Select(a => Task.Factory.StartNew(() => DoSomeWork(a))).ToArray());
Для первого подхода он выполняется один раз, а затем останавливается. Я не уверен, переписывает ли это ссылку или что-то. Может кто-то, пожалуйста. объяснить?
Также есть способ передать некоторый порядковый номер Задаче, который можно использовать для определения того, какая задача была запланирована первой. Я хочу дождаться завершения всех задач, но затем упорядочить результаты на основе последовательности в коллекции.