我有这个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%确认。
有任何线索如何解决这个问题,使其在每个元素上只能运行一次?
谢谢!
答案 0 :(得分:4)
这可能是问题 - 或者至少它是代码中的错误:
eventsList.Distinct();
这没有做任何事情 - 像所有其他LINQ运算符一样,它返回一个新序列,而不是修改现有序列。尝试:
eventsList = eventsList.Distinct().ToList();
我知道你说你100%确定该列表不包含任何重复项 - 但在这种情况下你不需要独特的调用,是吗?无论哪种方式,它都是无用的代码。
您提供的Parallel.For
代码很好,但它与Parallel.ForEach
的内容相符:
Parallel.ForEach(eventsList, Console.WriteLine);
如果仍然失败,请发一个简短但完整的程序来证明问题。