Параллельно. Для размера шага - PullRequest
8 голосов
/ 22 августа 2011

Кто-нибудь знает, есть ли перегрузка, которая позволила бы мне указать размер шага в цикле Parallel.For? Сэмплы в c # или VB.Net были бы отличными.

Спасибо, Гонсало

1 Ответ

15 голосов
/ 22 августа 2011

Google для "enumerable.range step", и вы должны быть в состоянии найти альтернативные реализации Enumerable.Range, которые предоставляют ступенчатые диапазоны.Тогда вы можете просто сделать

Parallel.ForEach(BetterEnumerable.SteppedRange(fromInclusive, toExclusive, step), ...)

Если Google не работает, реализация должна выглядеть примерно так:

public static class BetterEnumerable {
    public static IEnumerable<int> SteppedRange(int fromInclusive, int toExclusive, int step) {
        for (var i = fromInclusive; i < toExclusive; i += step) {
            yield return i;
        }
    }
}

В качестве альтернативы, если "yield return" дает один хиби джиби,Вы всегда можете просто создать обычный старый список на месте:

var list = new List<int>();
for (int i = fromInclusive; i < toExclusive; i += step) {
    list.Add(i);
}
Parallel.ForEach(list, ...);

Это должно быть легко переведено на VB, если это требуется.

...