Parallel.For step size
Asked Answered
B

1

9

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.

Brufsky answered 22/8, 2011 at 1:51 Comment(0)
V
15

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.

Veronikaveronike answered 22/8, 2011 at 1:56 Comment(3)
Thanks Dax. Would it be too much extra work if i'm trying to do this in VB.Net where there's no yield return?Brufsky
No VB experience, but you should be able to use a for loop to make a List Of Integer with the integers you need, and then use Parallel.ForEach with that list.Veronikaveronike
@Gonzalo: The async CTP enables the use of iterators in VB.NET.Manners

© 2022 - 2024 — McMap. All rights reserved.