码迷,mamicode.com
首页 > Windows程序 > 详细

[C#] 走进异步编程的世界 - 剖析异步方法(下)

时间:2016-09-12 21:53:33      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

走进异步编程的世界 - 剖析异步方法(下)

  感谢大家的支持,这是昨天发布《走进异步编程的世界 - 剖析异步方法(上)》的补充篇。

 

目录

  • 异常处理
  • 在调用方法中同步等待任务
  • 在异步方法中异步等待任务
  • 使用 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 呢?因为:任务没有被取消,并且异常都已经处理完成!

 

 

 


 

 这是预览版本,待重新整理后发布,谢谢

[C#] 走进异步编程的世界 - 剖析异步方法(下)

标签:

原文地址:http://www.cnblogs.com/liqingwen/p/5866241.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!