我正在尝试使用任务并行库为一系列项目安排函数调用。
以下代码无法正常工作:
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());
对于第一种方法,它只执行一次,然后停止。我不确定它是否覆盖了引用或其他内容。请问有人可以解释一下吗?
另外,是否有一种方法可以向任务传递一些序列号,以便可以用于标识哪个任务最先被调度。我的意思是,我想等待所有任务完成,但然后根据集合中的顺序排序结果。