更改C#Parallel.For循环的增量值

Gar*_*eth 5 c# parallel-processing task-parallel-library

我想转换一个for循环,它将迭代器的每次递增增加2,使用TPL进入Parallel For循环.数据不依赖于顺序或以任何方式受约束,但我只想处理源数组的每个其他元素中的数据(在下面的代码中是_Datalist),因此需要增加2.

我的For循环:

for (int i = 1; i < _DataList.Length - 1; i += 2)
{
     // Do work for _DataList[i]
}
Run Code Online (Sandbox Code Playgroud)

是否有可能告诉并行循环我想要增加2而不是1?

这是并行循环,但显然我每次迭代只增加1:

        Task.Factory.StartNew(() =>
            Parallel.For(1, _DataList.Length, i =>
            {
                // do work for _DataList[i]                    
            })
        );
Run Code Online (Sandbox Code Playgroud)

我可以告诉内部循环体忽略i的奇数值,但这看起来很麻烦 - 有没有办法在循环初始化中做某种方式?

Dar*_*rov 11

怎么样:

var odds = Enumerable.Range(1, _DataList.Length).Where(i => i % 2 != 0);

Task.Factory.StartNew(() =>
    Parallel.ForEach(odds, i =>
    {
        // do work for _DataList[i]                    
    })
);
Run Code Online (Sandbox Code Playgroud)


dtb*_*dtb 10

您可以将步数减半并将索引加倍:

Parallel.For(0, _DataList.Length / 2, i =>
{
    // do work for _DataList[2 * i]                    
});
Run Code Online (Sandbox Code Playgroud)