走进异步编程的世界 - 剖析异步方法(下)
序
感谢大家的支持,这是昨天发布《走进异步编程的世界 - 剖析异步方法(上)》的补充篇。
目录
- 异常处理
- 在调用方法中同步等待任务
- 在异步方法中异步等待任务
- 使用 Task.Delay() 暂停操作
一、异常处理
await 表达式也可以使用 try...catch...finally 结构。
1 internal class Program 2 { 3 private static void Main(string[] args) 4 { 5 var t = DoExceptionAsync(); 6 t.Wait(); 7 8 Console.WriteLine($"{nameof(t.Status)}: {t.Status}"); //任务状态 9 Console.WriteLine($"{nameof(t.IsCompleted)}: {t.IsCompleted}"); //任务完成状态标识 10 Console.WriteLine($"{nameof(t.IsFaulted)}: {t.IsFaulted}"); //任务是否有未处理的异常标识 11 12 Console.Read(); 13 } 14 15 /// <summary> 16 /// 异常操作 17 /// </summary> 18 /// <returns></returns> 19 private static async Task DoExceptionAsync() 20 { 21 try 22 { 23 await Task.Run(() => { throw new Exception(); }); 24 } 25 catch (Exception) 26 { 27 Console.WriteLine($"{nameof(DoExceptionAsync)} 出现异常!"); 28 } 29 } 30 }
图1-1
【分析】await 表达式位于 try 块中,按普通的方式处理异常。但是,为什么图中的状态、是否完成标识和是否失败标识分别显示:RanToCompletion 、True 和 False 呢?因为:任务没有被取消,并且异常都已经处理完成!
这是预览版本,待重新整理后发布,谢谢
时间: 2024-10-10 14:11:16