Bagaimana untuk menangkap pengecualian yang dilemparkan oleh kaedah async void dalam C#?

WBOY
Lepaskan: 2023-08-31 12:53:02
ke hadapan
1519 orang telah melayarinya

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

Dalam kod C# segerak, pengecualian menyebarkan timbunan panggilan sehingga ia mencapai blok tangkapan yang sesuai yang boleh mengendalikan pengecualian. Walau bagaimanapun, pengendalian pengecualian dalam kaedah tak segerak tidaklah semudah itu.

Kaedah tak segerak dalam C# boleh mempunyai tiga jenis nilai pulangan: batal, Tugas dan Tugas. Apabila pengecualian berlaku dalam kaedah tak segerak dengan jenis pemulangan Tugas atau Tugas , objek pengecualian dibalut dalam contoh AggregateException dan dilampirkan pada objek Tugas.

Jika berbilang pengecualian dilemparkan, semua pengecualian akan dilemparkan. Mereka disimpan dalam objek Tugas.

Contoh 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);
   }
}
Salin selepas log masuk

Output

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
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk menangkap pengecualian yang dilemparkan oleh kaedah async void dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan