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)