Parallel.For зацикливает одинаковые элементы - PullRequest
1 голос
/ 25 января 2012

У меня есть этот 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 Ответ

4 голосов
/ 25 января 2012

Это может быть проблемой - или, по крайней мере, это ошибка в вашем коде:

eventsList.Distinct();

Это ничего не делает - как и все другие операторы LINQ, оно возвращает новую последовательность, а не изменяет существующую. Попробуйте:

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

Я знаю тебя скажи ты на 100% уверен, что в списке нет дубликатов - но в этом случае тебе не понадобится отдельный вызов, не так ли? В любом случае, это была бесполезная строка кода.

Код Parallel.For, который вы дали, подойдет, хотя он будет лучше с Parallel.ForEach:

Parallel.ForEach(eventsList, Console.WriteLine);

Если это не помогло, пожалуйста, опубликуйте короткую, но завершенную программу, демонстрирующую проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...