Computer >> Máy Tính >  >> Lập trình >> C#

Làm thế nào để bắt một ngoại lệ được ném bởi một phương thức void async trong C #?

Trong mã C # đồng bộ, các ngoại lệ được truyền lên ngăn xếp cuộc gọi cho đến khi chúng đạt đến một khối bắt thích hợp có thể xử lý ngoại lệ. Tuy nhiên, việc xử lý ngoại lệ trong các phương thức không đồng bộ không đơn giản như vậy.

Một phương thức không đồng bộ trong C # có thể có ba loại giá trị trả về:void, Task và Task. Khi một ngoại lệ xảy ra trong một phương thức không đồng bộ có kiểu trả về là Nhiệm vụ hoặc Tác vụ, thì đối tượng ngoại lệ được bao bọc trong một thể hiện của AggregateException và được gắn vào đối tượng Tác vụ.

Nếu nhiều ngoại lệ được ném ra, tất cả chúng đều được lưu trữ trong đối tượng Tác vụ.

Ví dụ 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);
   }
}

Đầu ra

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