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. LowestBreakIteration

私にとって、最初のプロパティは正常に機能しています。しかし、3/0 の状況になると、ゼロ除算のエラーが発生します。そのため、2 番目の if ループで LowestBreakIteration の数が返されるはずですが、エラーがスローされます。体が同じ問題に遭遇して解決したかどうか教えてください!!.

また、これら 2 つのプロパティの主な目的を説明してください。どんなシチュエーションで役に立ちますか。

すぐに誰かから連絡が来ることを願っています。

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 に答える