3
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 的 2 个属性

  1. 完成了
  2. 最低中断迭代

对我来说,第一个属性工作正常。但是当涉及到 3/0 的情况时,它会给出除以零的错误。所以第二个 if 循环应该给我 LowestBreakIteration 的数量,但它会引发错误。如果有人遇到同样的问题并解决了,请告诉我!!

还请解释这两个属性的主要目的是什么。在什么情况下会有帮助。

希望很快能听到一些人的消息。

4

2 回答 2

1

这是因为它抛出了一个异常,改变你的循环只是一点点:

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-11T11:51:19.657 回答
0

您可以通过查看 ParallelLoopState 对象的 LowestBreakIteration 属性来了解对 Break 方法的调用如何影响最大迭代次数,如下所示:

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

*/

参考: http: //www.blackwasp.co.uk/ParallelLoopBreak_2.aspx

于 2012-10-11T11:51:13.370 回答