c# - Parallel.For 使用步骤 != 1

标签 c# for-loop parallel-processing task-parallel-library

有什么方法可以实现此 for 循环的 Parallel.For 版本?

for (int i = 0; i < 100; i += 2) { DoStuff(i); }

我没有看到接受 step 参数的重载,尽管我想不出任何这在逻辑上是不可能的原因。

this 的公认答案和 this问题建议在使用 Enumerable.Range 生成的一系列 int 上使用 Parallel.ForEach,但在我的例子中,我使用的是线程本地数据 < strike>所以 Parallel.ForEach 不是一个选项。

另一种选择是只检查循环体中的 i % 2 == 0return,但这仍然会执行线程本地数据初始化器 Func 和终结器 Func。下面是演示此选项的代码片段:

Parallel.For<Bar>(0, limit, 

    () => new Bar(), //thread local data initialize

    (i, state, local) => //loop body
    {
        if (i % 2 != 0) return local;
        local.foo += DoStuff(i);
        return local;
    },

    (local) => //thread local data post-action
    {
        lock (loopLocker)
        {
            globalData.foo += local.foo;
        );
    }
);

最佳答案

这里有一个提示:

for (int j = 0; j < 50; j++) { i = 2*j; DoStuff(); }

一般来说,看看你能不能算出迭代次数和从迭代次数到变量值的转换。

关于c# - Parallel.For 使用步骤 != 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14045112/

相关文章:

c++ - 我需要帮助来理解这个 openMP 示例

c# - 无法在 .net 核心中发布二进制文件

c# - 在哪里可以验证 SQL 键类型代码?

c# - 如何设置有效的本地ADFS URI?

c# - 如何在给定状态下停止 foreach 循环

java - 设置toggleButton不可点击

PHP - 字符串中的语句

c++ - TBB 具有更多派生任务的递归链式 react

javascript - For 循环循环太多

c - 使用 MPI-IO 和笛卡尔拓扑编写分布式数组