Heim > Backend-Entwicklung > C++ > Wie kann ich Ausnahmen von Async-Void-Methoden in C# abfangen?

Wie kann ich Ausnahmen von Async-Void-Methoden in C# abfangen?

DDD
Freigeben: 2025-01-24 02:45:12
Original
899 Leute haben es durchsucht

How Can I Catch Exceptions from Async Void Methods in C#?

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-Methode werden Ausnahmen abgefangen und an das Task-Objekt angehängt. Für asynchrone Void-Methoden gibt es jedoch kein Task-Objekt zur Behandlung von Ausnahmen.

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:

  1. 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>
    Nach dem Login kopieren
  2. Verwenden Sie die Wait()-Methode:

    <code class="language-csharp"> public void DoFoo()
     {
         try
         {
             Foo().Wait();
         }
         catch (ProtocolException ex)
         {
             // 由于等待了调用的完成,因此将捕获异常。
         }
     }</code>
    Nach dem Login kopieren

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

    Wenn .NET die Methode synchron ausführt, kann die Verwendung von Wait() dazu führen, dass die Anwendung blockiert.
  • Weitere Informationen dazu, wie der Compiler mit diesem Verhalten umgeht, finden Sie in der folgenden Erklärung:
  • https://www.php.cn/link/c4d856156b2c629314b9edd13523fe8e

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage