public static void Main (string[] args)
{
int k = 0;
int i = 3;
var loopRes = Parallel.For (0, 20, (J) =>
{
k = i / J;
Console.WriteLine ("Result After division " + J + " = " + k);
}
);
if (loopRes.IsCompleted) {
Console.WriteLine ("Loop was successful");
}
if (loopRes.LowestBreakIteration.HasValue) {
Console.WriteLine ("loopRes.LowestBreakIteration.Value = " + loopRes.LowestBreakIteration.Value);
}
} 当我在互联网上阅读时,我可以找到Parallel.For & Parallel.Foreach的两个属性
对我来说,第一处房产运转良好。但是,在3/0的情况下,它会给出被零误差的除法。因此,第二个if循环应该给出LowestBreakIteration的数量,但是它抛出了一个错误。请告诉我是否有人遇到过同样的问题并解决了它!
另外,请解释这两个属性的主要用途是什么。在什么情况下会有帮助。
希望能很快收到某个人的消息。
发布于 2012-10-11 11:51:19
这是因为它抛出了一个异常,只改变一下循环:
public static void Main (string[] args)
{
int k = 0;
int i = 3;
var loopRes = Parallel.For (0, 20, (J, loopState) =>
{
try { k = i / J; }
catch { loopState.Break(); }
Console.WriteLine ("Result After division " + J + " = " + k);
}
);
if (loopRes.IsCompleted) {
Console.WriteLine ("Loop was successful");
}
if (loopRes.LowestBreakIteration.HasValue) {
Console.WriteLine ("loopRes.LowestBreakIteration.Value = " + loopRes.LowestBreakIteration.Value);
}
} 发布于 2012-10-11 11:51:13
通过查看LowestBreakIteration对象的ParallelLoopState属性,您可以看到对中断方法的调用是如何影响最大迭代次数的,如下所示:
Parallel.For(1, 20, (i, pls) =>
{
Console.WriteLine(string.Format(
"i={0} LowestBreakIteration={1}", i, pls.LowestBreakIteration));
if (i >= 15)
{
pls.Break();
}
});
/* OUTPUT
i=10 LowestBreakIteration=
i=11 LowestBreakIteration=
i=19 LowestBreakIteration=
i=1 LowestBreakIteration=
i=2 LowestBreakIteration=19
i=3 LowestBreakIteration=19
i=6 LowestBreakIteration=19
i=7 LowestBreakIteration=19
i=8 LowestBreakIteration=19
i=9 LowestBreakIteration=19
i=12 LowestBreakIteration=19
i=13 LowestBreakIteration=19
i=14 LowestBreakIteration=19
i=15 LowestBreakIteration=19
i=4 LowestBreakIteration=19
i=5 LowestBreakIteration=15
*/参考资料:2.aspx
https://stackoverflow.com/questions/12838728
复制相似问题