Behandeln von Ausnahmen in asynchronen Void-Methoden
In Microsofts .NET Async CTP verhalten sich asynchrone Methoden anders, wenn sie Ausnahmen auslösen. In einer asynchronen Task oder einer asynchronen Task
Ausnahme abfangen
Um eine von einer asynchronen void-Methode ausgelöste Ausnahme abzufangen, müssen Sie explizit auf den Methodenaufruf warten oder die Wait()-Methode verwenden:
Warten auf Methodenaufruf:
<code class="language-csharp"> public async Task Foo() { var x = await DoSomethingAsync(); } public async void DoFoo() { try { await Foo(); } catch (ProtocolException ex) { // 由于在异步方法中等待了调用,因此将捕获异常。 } }</code>
Verwenden Sie die Wait()-Methode:
<code class="language-csharp"> public void DoFoo() { try { Foo().Wait(); } catch (ProtocolException ex) { // 由于等待了调用的完成,因此将捕获异常。 } }</code>
Fehlerbehandlungssemantik
Wie Stephen Cleary betonte, haben asynchrone Void-Methoden unterschiedliche Fehlerbehandlungssemantiken:
„Wenn eine asynchrone Void-Methode eine Ausnahme auslöst, wird die Ausnahme direkt für den SynchronizationContext ausgelöst, der aktiv war, als die asynchrone Void-Methode gestartet wurde.“
Weitere Anweisungen
Das obige ist der detaillierte Inhalt vonWie kann ich Ausnahmen von Async-Void-Methoden in C# abfangen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!