Richtiges Behandeln von HttpClient-Ausnahmen innerhalb von async / await

8

Ich hatte gehofft, jemand könnte mich ein wenig über ein Problem aufklären, das ich in Bezug auf async / erwarten Exception Handling mit HttpClient. Ich habe einen Code zur Veranschaulichung geschrieben, der sowohl auf einem Windows Phone 8-Gerät als auch auf dem Emulator ausgeführt wird:

%Vor%

Durch Antippen der Schaltfläche, die diese Funktion aufruft, wird die folgende Ausgabe in der Debugger-Konsole erstellt, wobei die interessantesten in fett :

sind

BEGIN FEHLERANFRAGE:

Eine Ausnahme vom Typ 'System.Net.WebException' ist in System.Windows.ni.dll aufgetreten und wurde nicht vor einer verwalteten / nativen Grenze behandelt

Eine Ausnahme vom Typ 'System.Net.WebException' ist in System.Windows.ni.dll aufgetreten und wurde nicht vor einer verwalteten / nativen Grenze behandelt

In mscorlib.ni.dll

ist eine Ausnahme der ersten Chance vom Typ 'System.Net.Http.HttpRequestException' aufgetreten

Eine Ausnahme vom Typ 'System.Net.Http.HttpRequestException' ist in mscorlib.ni.dll aufgetreten und wurde nicht vor einer verwalteten / nativen Grenze behandelt

GEWACHSENE AUSNAHME: (und hier wird die HttpRequestException ausgegeben)

Natürlich erwarte ich in diesem Fall einen Fehler, da die URL, die ich anrufe, Unsinn ist. Was ich hier nicht verstehe, ist, warum der Debugger meldet, dass die Ausnahmen nicht behandelt werden, wenn die Ausgabe gleichzeitig meldet, dass die Ausnahme abgefangen wurde. Außerdem reagiert die UI-Seite der App während des Druckens der Ausgabe nicht mehr so ​​schnell, was darauf hindeutet, dass etwas nicht stimmt.

Ist das nicht die Möglichkeit, Ausnahmen beim Arbeiten mit Async zu behandeln und abzuwarten? Ich schätze jeden Input! Danke.

    
Nils Holtar 26.09.2013, 16:58
quelle

3 Antworten

6

Dies ist ein Artefakt des Debuggers. Es bestimmt, dass eine Ausnahme "nicht abgefangen" wird, weil sie noch nicht abgefangen wurde . In diesem Fall ist dies das erwartete Verhalten.

Sie behandeln die Ausnahmen korrekt.

    
Stephen Cleary 26.09.2013, 18:11
quelle
22

Wenn Sie HttpClient verwenden, versuchen Sie, response.EnsureSuccessStatusCode();

zu verwenden

Nun wird HttpClient eine Ausnahme auslösen, wenn der Antwortstatus kein Erfolgscode ist.

%Vor%

ORIGINALQUELLE DES CODES: Ссылка

    
mirushaki 02.09.2014 11:34
quelle
0

Der Debugger sagt Ihnen, dass diese Ausnahme die erste Chance ist. Wenn ein Debugger an Ihren Prozess angehängt ist, wird er für jede ausgelöste Exception benachrichtigt und basierend darauf, wie der Debugger konfiguriert wurde, wird er entscheiden, was damit geschehen soll. Sie können Was ist die erste Chance? für weitere Details.

Beachten Sie außerdem nur bestimmte Ausnahmen, damit Sie verstehen, welche Ausnahmen Sie erwarten und warum.

    
Anupam 27.09.2013 02:33
quelle