Как увеличить индекс на определенное значение в Parallel.For? - PullRequest
8 голосов
/ 30 ноября 2011

Я хочу увеличить индекс для определенного значения, например, 2:

for (int i = 0; i < 10; i+=2)
{
    Console.WriteLine(i);
}

Как мне сделать то же самое, используя класс Parallel, например:

Parallel.For(0, 10, i =>
{
    Console.WriteLine(i);
    i += 2; //this a naïve assumption, it's not working
});

Редактировать

Я бы хотел, чтобы цикл Parallel выполнял только 5 операций (как последовательность для), и порядок для меня не имеет значения.

Ответы [ 5 ]

10 голосов
/ 30 ноября 2011

Неявное предположение в первом цикле состоит в том, что j увеличивается последовательно.
Во втором примере значение j может быть любым из 0 -> 9 в любом из циклов.

Вы можете добиться того же поведения с помощью следующего:

Parallel.ForEach(Enumerable.Range(0, 5).Select(i => i*2), i =>
{
  Console.WriteLine(i);
});
3 голосов
/ 30 ноября 2011

Если вы пытаетесь сделать эквивалент шага, этот пост может помочь:

Параллельно. Для размера шага

Если вы просто хотите опустить определенное значение, вам просто нужно его проигнорировать.

Parallel.For не будет запускать элементы по порядку, поэтому i += 2 не имеет смысла.

3 голосов
/ 30 ноября 2011

Похоже, что вы хотите перебрать значения от 0 до 10 с шагом 2. Почему бы не реализовать это следующим образом:

Parallel.For(0, 5, i =>
{
    int value = i * 2;
    Console.WriteLine(value);
});
2 голосов
/ 02 декабря 2011

Другой подход заключается в использовании предложения where:

Parallel.ForEach(Enumerable.Range(0, 10).Where(i => i % 2 == 0), i =>
{
    Console.WriteLine(i);
});
2 голосов
/ 30 ноября 2011

Простое приспособление:

Parallel.For(0, 5, i =>
{
    int j = i * 2;
    Console.WriteLine(j);
    // i += 2; //this a naïve assumption, it's not working
});

Другими словами, вы почти можете найти проекцию от последовательного i до желаемого значения петли (j). произвольная ср

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

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