Heim  >  Artikel  >  Backend-Entwicklung  >  Wie fängt man Ausnahmen ab, die von asynchronen Void-Methoden in C# ausgelöst werden?

Wie fängt man Ausnahmen ab, die von asynchronen Void-Methoden in C# ausgelöst werden?

WBOY
WBOYnach vorne
2023-08-31 12:53:021471Durchsuche

如何捕获 C# 中 async void 方法抛出的异常?

Im synchronen C#-Code breitet sich eine Ausnahme im Aufrufstapel nach oben aus, bis sie einen geeigneten Catch-Block erreicht, der die Ausnahme verarbeiten kann. Allerdings ist die Ausnahmebehandlung in asynchronen Methoden nicht so einfach.

Asynchrone Methoden in C# können drei Arten von Rückgabewerten haben: void, Task und Task. Wenn eine Ausnahme in einer asynchronen Methode mit dem Rückgabetyp Task oder Task auftritt, wird das Ausnahmeobjekt in eine AggregateException-Instanz eingeschlossen und an das Task-Objekt angehängt.

Wenn mehrere Ausnahmen ausgelöst werden, werden alle Ausnahmen ausgelöst. Sie werden in Task-Objekten gespeichert.

Beispiel 1

static async Task Main(string[] args) {
   await DoSomething();
   Console.ReadLine();
}
public static async Task Foo() {
   throw new ArgumentNullException();
}
public static async Task DoSomething(){
   try{
      await Foo();
   }
   catch (ArgumentNullException ex){
      Console.WriteLine(ex);
   }
}

Ausgabe

System.ArgumentNullException: Value cannot be null.
at DemoApplication.Program.Foo() in C:\Users\Koushik\Desktop\Questions\ConsoleApp\Program.cs:line 37
at DemoApplication.Program.DoSomething() in C:\Users\Koushik\Desktop\Questions\ConsoleApp\Program.cs:line 44

Das obige ist der detaillierte Inhalt vonWie fängt man Ausnahmen ab, die von asynchronen Void-Methoden in C# ausgelöst werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen