平行.对于循环相同的项目
本文关键字:项目 循环 于循环 平行 | 更新日期: 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);
如果仍然失败,请发布一个简短但完整的程序来演示问题。