如何在Parallel.For中增加特定值的索引
本文关键字:索引 增加 Parallel For | 更新日期: 2023-09-27 18:16:38
我想增加一个特定值的索引,例如2:
for (int i = 0; i < 10; i+=2)
{
Console.WriteLine(i);
}
我如何使用Parallel
类做同样的事情,如:
Parallel.For(0, 10, i =>
{
Console.WriteLine(i);
i += 2; //this a naïve assumption, it's not working
});
编辑
我希望Parallel
循环只运行5个操作(作为顺序for),顺序对我来说无关紧要。
在第一个循环中隐含的假设是j是顺序递增的。
在第二个例子中,j的值可以是任意循环中0 -> 9的任意值。
您可以通过以下方式实现相同的行为:
Parallel.ForEach(Enumerable.Range(0, 5).Select(i => i*2), i =>
{
Console.WriteLine(i);
});
看起来您想迭代0到10的值,增量为2。为什么不像下面这样实现呢?
Parallel.For(0, 5, i =>
{
int value = i * 2;
Console.WriteLine(value);
});
如果你正在尝试做与步长相当的事情,那么这篇文章可能会有所帮助:
平行。对于步长
如果你只是想省略某个值,你只需要忽略它。
平行。For不按顺序运行,所以i += 2
是没有意义的。
一个简单的改编:
Parallel.For(0, 5, i =>
{
int j = i * 2;
Console.WriteLine(j);
// i += 2; //this a naïve assumption, it's not working
});
换句话说,您几乎总能找到从顺序i
到期望的环值(j
)的投影。rbitrary sr
这里的另一个利益相关者是分区者,你不能指望它处理任意序列
另一种方法是使用where子句:
Parallel.ForEach(Enumerable.Range(0, 10).Where(i => i % 2 == 0), i =>
{
Console.WriteLine(i);
});