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

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

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

目录

  • 异常处理
  • 在调用方法中同步等待任务
  • 在异步方法中异步等待任务
  • 使用 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

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

转走进异步编程的世界 - 开始接触 async/await

这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $"" 来拼接字符串,相当于string.Format() 方法. 目录 What's 异步? async/await 结构 What's 异步方法? 一.What's 异步? 启动程序时,系统会在内存中创建一个新的进程.进程是构成运行程序资源的集合. 在进程内部,有称为线程的内核对象,它代表的是真正的执行程序.系统会在 Main 方法的第一行语句就开始线程

[C#] 走进异步编程的世界 - 开始接触 async/await(转)

原文链接:http://www.cnblogs.com/liqingwen/p/5831951.html 走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $"" 来拼接字符串,相当于string.Format() 方法. 目录 What's 异步? async/await 结构 What’s 异步方法? 一.What's 异步? 启动程序时,系

走进异步编程的世界 - 开始接触 async/await

[C#] 走进异步编程的世界 - 开始接触 async/await 走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $"" 来拼接字符串,相当于string.Format() 方法. 目录 What's 异步? async/await 结构 What’s 异步方法? 一.What's 异步? 启动程序时,系统会在内存中创建一个新的进程.进程是构

走进windows编程的世界-----windows进程

Windows进程  1 Windows进程    进程是一个容器,包含了一个应用程序实例的各种资源.Windows多任务的操作系统,因此可以同时执行多个进程.      2 Windows进程的一些特点    2.1 进程中包含了执行代码等资源.    2.2 进程都具有私有的地址空间.    2.3 每个进程都有一个ID,标识进程.    2.4 每个进程都有自己的安全属性    2.5 至少要包含一个可以执行的线程.    二 进程的环境 1 环境信息的获取    获取:    LPVOI

走进windows编程的世界-----消息处理函数(1)

Win32消息机制 过程驱动:程序是按照我们预先定义好的顺序执行,每执行一步,下一步都已经按照预定的顺序 继续执行,直至程序结束. 事件驱动:程序的执行顺序是无序的.某个时间点所执行的代码,是由外界 通知.由于我们无法决定程序执行顺序.所以代码的执行也是无序的. Win32基本消息 WM_DESTROY:       窗口销毁时的消息,可以做退出或善后处理 WM_CREATE:       窗口创建消息,是在窗口创建后,窗口处理函数收到的第一条消息   可以在这个消息内,做初始化或者穿件子窗口

走进windows编程的世界-----字符编码

1   字符编码 1.1编码的历史 1.1.1ASCII码 0=127 7位表示 1.1.2ASCII扩展码 0-255 8为表示. 代码页:通过代码也来切换对应的字符(数字表示) 1.1.3双字节字符集DBCS 使用一个或两个字节表示字符. 1.1.4Unicode编码 全部使用2个字节表示字符 内存 硬盘等资源占用变大.对编码支持度大. 字符集 1.2C 语言和编码 1.2.1单字节的字符和字符串 Char  cText = 'A'; Char * pszText ="ABCD"

走进windows编程的世界-----消息处理函数(4)

一 右键菜单  1 右键菜单    当在窗口点击鼠标右键时,弹出的菜单.  2 右键菜单的使用    2.1 创建菜单      CreatePopupMenu    2.2 菜单增加     AppendMenu    2.3 菜单的显示. BOOL TrackPopupMenu( HMENU hMenu, //显示的菜单句柄 UINT uFlags, //显示的方式 int x, //菜单的X屏幕坐标 int y, //菜单的Y屏幕坐标 int nReserved, //保留,必须为0 HW

走进windows编程的世界-----消息处理函数(3)

二 定时器消息 1 定时器消息 WM_TIMER   按照定时器设置时间段,自动向窗口发送一个定时器消息WM_TIMER. 优先级比较低.   定时器精度比较低,毫秒级别.消息产生时间也精度比较低.    2 消息和函数   2.1 WM_TIMER  - 消息ID    wParam: 定时器的ID    lParam: 定时器的处理函数 2.2 SetTimer  - 设置一个定时器 UINT SetTimer( HWND hWnd, //窗口的句柄,可以为NULL UINT nIDEven

走进windows编程的世界-----绘图相关

Windows绘图 1 图形绘制      1.1 图形绘制的方式      获取到绘图句柄-设备描述表(DC),使用相应的绘图的API,在设备上绘制图形.          1.2 颜色      R\G\B三色, 每种颜色8位, 共24位颜色.      32位颜色: 颜色数量24位颜色, 多出来的8位表示灰度.      16位: 颜色数量2的16次方.            Win32下,颜色的定义 COLORREF(DWORD), RGB宏定义颜色       COLORREF nCo