【发布时间】:2010-10-20 16:45:56
【问题描述】:
我想使用 TPL 将每次通过时将迭代器递增 2 的 for 循环转换为并行 For 循环。数据不依赖于顺序或以任何方式受到约束,但我只想处理源数组的每个其他元素中的数据(在下面的代码中为 _Datalist),因此需要增加 2。
我的 For 循环:
for (int i = 1; i < _DataList.Length - 1; i += 2)
{
// Do work for _DataList[i]
}
是否可以告诉并行循环我想将 i 增加 2 而不是 1?
这是并行循环,但显然 i 每次迭代只会增加 1:
Task.Factory.StartNew(() =>
Parallel.For(1, _DataList.Length, i =>
{
// do work for _DataList[i]
})
);
我可以告诉内部循环体忽略 i 的奇数值,但这似乎有点混乱 - 有没有办法在循环初始化中以某种方式做到这一点?
【问题讨论】:
-
不要只忽略奇数;这会创建两倍于您需要的任务,这会增加许多不必要的开销。
-
是的,我明白你的意思
标签: c# parallel-processing task-parallel-library