sta*_*ser 3 c# task-parallel-library c#-4.0
我正在尝试使用任务并行库为一系列项目调度函数调用.
以下不起作用
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());
Run Code Online (Sandbox Code Playgroud)
但下面的工作
Task.WaitAll(aCollection.Select(a => Task.Factory.StartNew(() => DoSomeWork(a))).ToArray());
Run Code Online (Sandbox Code Playgroud)
对于第一种方法,它执行一次然后停止.我不确定它是否覆盖了引用或其他内容.有人可以.说明?
还有一种方法可以将一些序列号传递给Task,可用于识别首先安排的任务.我的意思是我想等待所有任务完成,然后根据集合中的顺序排序结果.
小智 5
我不知道这是否导致执行停止,但也许是因为你在这里关闭循环变量:
DoSomeWork(someValue));
Run Code Online (Sandbox Code Playgroud)
您需要创建一个局部变量并分配someValue给它,然后使用该局部变量,如我的链接问题中所述,如下所示:
foreach(var someValue in aCollection)
{
var localCopy = someValue;
var t = Task.Factory.StartNew(() => DoSomeWork(localCopy));
tasks.Add(t);
}
Run Code Online (Sandbox Code Playgroud)
同样,我不知道这是否是你的死锁问题,但这是一个很可能会导致问题的问题.