9

有谁知道是否有任何过载可以让我在 Parallel.For 循环中指定步长?c# 或 VB.Net 中的示例会很棒。

谢谢,贡萨洛

4

1 回答 1

15

谷歌搜索“enumerable.range step”,您应该能够找到提供阶梯范围的 Enumerable.Range 的替代实现。然后你可以做一个

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

如果谷歌不工作,实现应该是这样的:

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;
        }
    }
}

或者,如果“收益回报”给了一个 heebie jeebies,你总是可以就地创建一个常规的旧列表:

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

如果需要,这应该很容易翻译成 VB。

于 2011-08-22T01:56:58.353 回答