Parallel.For循环相同的项目

时间:2012-01-25 15:56:08

标签: c# loops for-loop

我有这个Parallel.For代码:

foreach (string g in allGames)
{
    eventsList.Add(game);
}

eventsList.Distinct();

Parallel.For(0, eventsList.Count, i =>
                {
                    Console.WriteLine(eventsList[i]);
                });

allGames数组包含以下字符串:

String A: Lee, Stephen - Cope, Jamie
String B: Carter, Ali - Stevens, M
String C: Dott, G - McManus, Alan
String D: Bingham, S - Liu Song
String E: Davis, Mark - Joyce, Mark
String F: Walden, R - Liu Chuang

我的结果如下:

Game: Lee, Stephen - Cope, Jamie
Game: Lee, Stephen - Cope, Jamie
Game: Lee, Stephen - Cope, Jamie
Game: Lee, Stephen - Cope, Jamie
Game: Carter, Ali - Stevens, M
Game: Dott, G - McManus, Alan
Game: Bingham, S - Liu Song
Game: Davis, Mark - Joyce, Mark
Game: Walden, R - Liu Chuang

似乎它在同一次迭代中进行了4次(它在代码中多次发生)。

我确认eventsList列表不包含任何重复项,即100%确认。

有任何线索如何解决这个问题,使其在每个元素上只能运行一次?

谢谢!

1 个答案:

答案 0 :(得分:4)

这可能是问题 - 或者至少它是代码中的错误:

eventsList.Distinct();

这没有做任何事情 - 像所有其他LINQ运算符一样,它返回一个新序列,而不是修改现有序列。尝试:

eventsList = eventsList.Distinct().ToList();

我知道你你100%确定该列表不包含任何重复项 - 但在这种情况下你不需要独特的调用,是吗?无论哪种方式,它都是无用的代码。

您提供的Parallel.For代码很好,但它与Parallel.ForEach的内容相符:

Parallel.ForEach(eventsList, Console.WriteLine);

如果仍然失败,请发一个简短但完整的程序来证明问题。