Search code examples
c#.netvb.netparallel-extensions

Parallel.For step size


Does anyone know if there's any overload that would allow me to specify a step size in a Parallel.For loop? Samples in either C# or VB.Net would be great.


Solution

  • Google for "enumerable.range step" and you should be able to come upon alternate implementations of Enumerable.Range that provide stepped ranges. Then you can just do a

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

    If google isn't working, implementation should be something like this:

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

    Alternately if "yield return" gives one the heebie jeebies, you can always just create a regular old list in-place:

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

    This should be easily translatable to VB if that's a requirement.