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

WBOY
Freigeben: 2023-08-31 12:53:02
nach vorne
1513 Leute haben es durchsucht

如何捕获 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);
   }
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:tutorialspoint.com
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