C # Parallel.For, но с i приращением на n каждый раз? [Дубликат]

Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:

Вы пытаетесь использовать ссылочную переменную, значение которой Nothing / null. Если для ссылочной переменной значение Nothing / null, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.

Вы либо никогда не присваивали какую-либо переменную, никогда не создавали экземпляр значения, присвоенного переменной, или вы вручную устанавливали переменную, равную Nothing / null, или вы вызывали функцию, которая установите для этой переменной значение Nothing / null.

8
задан ckittel 22 August 2011 в 04:07
поделиться

1 ответ

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» дает один heebie jeebies, вы всегда можете просто создать обычный старый список на месте:

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

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

15
ответ дан Dax Fohl 25 August 2018 в 21:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: