“的foreach”使用并行任务库时失败 [英] 'foreach' failing when using Parallel Task Library
本文介绍了“的foreach”使用并行任务库时失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
下面code创建文件的正确数目,但是每个文件包含第一列表中的内容。任何人都可以发现我做了什么错了吗?
私人的IList<列表<字符串>> GetLists()
{
// code略...
}
私人无效DoSomethingInParallel()
{
变种列表= GetLists();
VAR任务=新的名单,其中,任务>();
VAR厂=新TaskFactory();
的foreach(列表中的VAR名单)
{
tasks.Add(factory.StartNew(()=>
{
WriteListToLogFile(名单);
}));
}
Task.WaitAll(tasks.ToArray());
}
解决方案
道歉没有回答这点。我找到了解决办法 - 虽然我不明白为什么它的工作原理...
本来,我有这个...
的foreach(VAR列表中列出)
{
tasks.Add(factory.StartNew(()=>
{
WriteListToLogFile(名单);
}));
}
更改顺序的foreach到并行的foreach解决了这个问题...
Parallel.ForEach<字符串>(列表,列表=>
tasks.Add(factory.StartNew(()=>
{
WriteListToLogFile(名单);
}));
);
The following code creates the correct number of files, but every file contains the contents of the first list. Can anyone spot what I've done wrong please?
private IList<List<string>> GetLists()
{
// Code omitted for brevity...
}
private void DoSomethingInParallel()
{
var lists = GetLists();
var tasks = new List<Task>();
var factory = new TaskFactory();
foreach (var list in lists)
{
tasks.Add(factory.StartNew(() =>
{
WriteListToLogFile(list);
}));
}
Task.WaitAll(tasks.ToArray());
}
解决方案
Apologies for not replying to this earlier. I found a solution - although I don't understand why it works...
Originally, I had this ...
foreach (var list in lists)
{
tasks.Add(factory.StartNew(() =>
{
WriteListToLogFile(list);
}));
}
Changing the sequential foreach to a parallel foreach fixes the problem...
Parallel.ForEach<string>(lists, list =>
tasks.Add(factory.StartNew(() =>
{
WriteListToLogFile(list);
}));
);
这篇关于“的foreach”使用并行任务库时失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文