async和await结构
序
- 前篇博客异步编程系列(一) 已经介绍了何谓异步编程,这篇主要介绍怎么实现异步编程,主要通过C#5.0引入的async/await来实现。
BeginInvoke和EndInvoke
- 在学习async/await结构的异步编程前,先了解一下5.0以前是怎么使用异步
- BeginInvoke方法
- 从当前线程池中获取一个线程运行调用的方法;返回给给调用的线程IasyncResult接口对象,
包含了异步方法的状态信息,原始线程继续向下执行。
- EndInvoke方法
- 接收BeginInvoke返回的对象;若异步方法仍未执行完毕,当前线程就会停止并等待异步方法的线程执行
完毕。
async和await关键字
- async和await必须成对出现,即在调用异步方法时,使用await关键字等待异步操作完成时,
同时,在使用await关键字在的方法或匿名方法上加上async关键字以注明该方法内包含异步
等待语句。
异步方法
- 在该方法执行完成前立即返回调用方法,在调用方法继续执行的过程中完成任务
返回类型
- void
-
单纯调用方法执行异步方法
- Task
-
调用方法执行异步方法,用Task对象接收,可以查看和改变异步方法的状态
- Task< T >
-
调用方法执行异步方法,并从中获取一个T类型的返回值
异步方法可以返回Task,Task< T >和void,但在大多数情况下,都返回Task或者Task< T >,
只有必要时才返回void。因为Task和Task< T >是异步操作,可以把结果传给await操作,
而返回值为void的方法,不能做到,也不能检查到异步方法的状态。void最常用在事件句柄中,
例如winform中button按钮就可以改成异步操作。