【问题标题】:Parallel.For step sizeParallel.For 步长
【发布时间】:2011-08-22 01:51:09
【问题描述】:

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

谢谢,贡萨洛

【问题讨论】:

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


    【解决方案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;
            }
        }
    }
    

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

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

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

    【讨论】:

    • 谢谢达克斯。如果我尝试在没有收益回报的 VB.Net 中执行此操作,会不会有太多额外的工作?
    • 没有 VB 经验,但您应该能够使用 for 循环创建一个包含所需整数的整数列表,然后在该列表中使用 Parallel.ForEach
    • @Gonzalo:async CTP 允许在 VB.NET 中使用迭代器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多