平行.对于循环相同的项目

本文关键字:项目 循环 于循环 平行 | 更新日期: 2023-09-27 18:21:28

我有这个Parallel。对于代码:

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次(它在代码中发生了很多次)。

我确认事件列表不包含任何重复项,这是100%确认的。

有什么线索可以告诉我如何解决这个问题,使它在每个元素上只工作一次?

谢谢!

平行.对于循环相同的项目

这可能是问题所在,或者至少是代码中的一个错误:

eventsList.Distinct();

这没有任何作用——就像所有其他LINQ操作符一样,它返回一个新序列,而不是修改现有序列。尝试:

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

我知道你你100%确定列表中不包含任何重复项,但在这种情况下,你不需要不同的调用,是吗?不管怎样,这都是一行无用的代码。

您给出的Parallel.For代码很好,尽管使用Parallel.ForEach:会更整洁

Parallel.ForEach(eventsList, Console.WriteLine);

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