我想增加特定值的索引,例如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次操作(作为顺序),顺序对我来说无关紧要。
答案 0 :(得分:9)
第一个循环中的隐含假设是j按顺序递增 在第二个例子中,j的值可以是0 - >中的任何一个。 9在任何循环中。
您可以通过以下方式实现相同的行为:
Parallel.ForEach(Enumerable.Range(0, 5).Select(i => i*2), i =>
{
Console.WriteLine(i);
});
答案 1 :(得分:3)
看起来你想要迭代值0到10,增量为2.为什么不像下面那样实现它:
Parallel.For(0, 5, i =>
{
int value = i * 2;
Console.WriteLine(value);
});
答案 2 :(得分:3)
如果您尝试执行相当于步长的操作,那么这篇文章可能有所帮助:
如果您只想省略某个值,则只需忽略它。
Parallel.For不会按顺序运行项目,因此i += 2
毫无意义。
答案 3 :(得分: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
)的投影。任意sr
这里的另一个利益相关者是分区,你不能指望它处理任意序列。
答案 4 :(得分:1)
另一种方法是使用where子句:
Parallel.ForEach(Enumerable.Range(0, 10).Where(i => i % 2 == 0), i =>
{
Console.WriteLine(i);
});