2017-08-31 8 views
0
public class PollyTest 
{ 
    public void RunWithPolly() 
    { 
     Console.WriteLine("RunWithPolly invoked..."); 
     int zero = 0; 
     int result= 10/zero; 
    } 
} 

そして、私の主な機能には、私は以下のようにポリシーを作成します。これで私は何も分かりませんが、Pollyは私の行動をやり直していませんか?

var retryPolicy = Policy.Handle<DivideByZeroException>().Retry(3); 
PollyTest pollyTest = new PollyTest(); 
retryPolicy.Execute(() => pollyTest.RunWithPolly()); 

私はこれを実行すると、それは常に非常に最初の実行自体に関数内で未処理の例外エラー「RunWithPolly」で失敗します。

+0

RunWithPollyにDebuggerStepThrough属性を付けてアノテーションを付けて問題を解決しました。誰も私がそれがなぜそう理解するのを助けることができますか? – vmn

+0

質問に答えましたが、関心がありません:どのバージョンのVStudioを使用していましたか? –

答えて

1

TL; DR VSデバッガが例外を突破しているのを見ていただけです。

日時:

私はこれを実行すると、それは常にあなたが見ていた何を非常に最初の実行自体

に関数内で未処理の例外エラー「RunWithPolly」で失敗ポリーかではなかったです実行が失敗します。デバッガがDivideByZeroExceptionにスローされているのを見ていただけです(デバッガコントロールを使用して実行を続行するかどうかを決定する前に表示されます)。

日時:

DebuggerStepThrough属性でRunWithPollyメソッドに注釈を付けるには、問題

これは変更または実行について何かを '修正' しませんでしたを解決しました。デバッガが例外を壊すのを止めて、何かが異なって動作しているかのように見せかけるだけでした。デバッガなしで、あなたの例を実行

var retryPolicy = Policy 
    .Handle<DivideByZeroException>() 
    .Retry(3, 
     (ex, i) => { Console.Writeline($"Making retry {i} due to {ex.Message}."); } 
    ); 

、あなたはすべての再試行が行われて表示されます。

あなたはその代わりに、あなたのポリーポリシーを宣言することができ、自分自身にこれを確認するには。デバッガ を使用し、[DebuggerStepThrough]属性を使用せずに実行すると、デバッガがブレークするたびにF5/debugger-continueを押すだけで、すべての再試行でコードが正常に動作します。 [DebuggerStepThrough]は、デバッガで表示されるものとまったく同じです。


このStackOverflow q/aは、同じシナリオを示しています。

Polly wikiは、VSデバッガが「ユーザー未処理」例外によって何を意味するのか、なぜこのことが混乱するのか、およびデバッグノイズを低減するためのさまざまなバージョンのVisual Studioを構成するオプションについて詳細に説明しています。

関連する問題