Parallel.For步长

时间:2011-08-22 01:51:10

标签: c# .net vb.net parallel-extensions

有没有人知道是否有任何重载允许我在Parallel.For循环中指定步长? c#或VB.Net中的样本都很棒。

谢谢Gonzalo

1 个答案:

答案 0 :(得分:15)

谷歌的“enumerable.range步骤”,你应该能够实现提供步进范围的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;
        }
    }
}

或者,如果“收益率回报”给出一个heebie jeebies,你可以随时创建一个常规的旧列表:

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

如果这是一个要求,这应该很容易翻译成VB。