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

Und in meiner Hauptfunktion erstelle ich wie unten ein: EineWas fehlt mir dabei, dass Polly meine Aktion nicht wiederholt?

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

Als ich dies auszuführen, ist es nicht immer mit nicht behandelten Ausnahmefehler innerhalb Funktion „RunWithPolly“ auf der allerersten Lauf selbst.

+0

Die Annotation der Methode RunWithPolly mit DebuggerStepThrough-Attribut löste das Problem. Kann mir bitte jemand helfen, zu verstehen, warum es so ist? – vmn

+0

Haben die q beantwortet, aber aus Interesse: Welche Version von VStudio hast du benutzt? –

Antwort

1

TL; DR Sie haben gerade gesehen, dass der VS-Debugger auf Ausnahmen reagiert.

Re:

Als ich dies auszuführen, ist es nicht immer mit nicht behandelten Ausnahmefehler innerhalb Funktion „RunWithPolly“ auf der allerersten Lauf selbst

Was Sie sahen nicht Polly oder die Ausführung schlägt fehl. Sie haben gerade gesehen, dass der Debugger auf DivideByZeroException stößt (um es Ihnen zu zeigen, bevor Sie entscheiden, ob/wie die Ausführung mit den Debugger-Steuerelementen fortgesetzt wird).

Re:

die Methode RunWithPolly mit DebuggerStepThrough Attribute mit Anmerkungen versehen lösten das Problem

Diese oder 'fix' etwas über die Ausführung nicht ändern. Es hat einfach den Debugger angehalten, die Exception zu unterbrechen, so dass es so aussieht, als würde etwas anders funktionieren.

Um dies zu selbst zu überprüfen, können Sie Ihre Polly Politik statt wie erklären könnte:

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

Ihr Beispiel ohne den Debugger dann starten und Sie werden sehen, dass alle Wiederholungsversuche gemacht. Führen Sie es mit dem Debugger und ohne das Attribut [DebuggerStepThrough], drücken Sie einfach F5/Debugger-weiter jedes Mal, wenn der Debugger bricht, und Sie werden wieder sehen, der Code korrekt durch alle Wiederholungen arbeiten. Die [DebuggerStepThrough] macht keinen Unterschied zur Ausführung, nur was Sie im Debugger sehen.


Diese StackOverflow q/a beschreibt das identische Szenario. Die Polly wiki beschreibt im Detail, warum dies geschieht, was der VS-Debugger durch eine 'user-unhandled'-Ausnahme bedeutet, warum dies verwirrend sein kann, und Optionen zum Konfigurieren verschiedener Versionen von Visual Studio, um dieses Debugging-Rauschen zu reduzieren.

Verwandte Themen