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

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

我的For循环:

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

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

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

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

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

怎么样:

 var odds = Enumerable.Range(1, _DataList.Length).Where(i => i % 2 != 0); Task.Factory.StartNew(() => Parallel.ForEach(odds, i => { // do work for _DataList[i] }) ); 

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

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

Darin Dimitrov的答案显示了一种简单的方法来实现这一目标。

然而,这没有添加,因为它通常表明循环体不是真正不同的。 在大多数情况下,使用不同增量值的需要通常仅需要以特定顺序处理或者导致并行化以创建竞争条件的其他问题。

只是跳过偶数值。

 Task.Factory.StartNew(() => Parallel.For(1, _DataList.Length, i => { if(i % 2 == 0) { // do work for } }) );