1、以一个Http请求收发程序为例子,使用了System.Net中的类。要使用异步方法,需要引用System.Threading。
2、首先,我们不希望单击处理函数button1_click阻塞UI进程。给其添加async关键字,以声明为异步方法,使其可以单独等待。
3、在async声明的方法中,就可以使用await关键字了。如果await右边的同样是一个异步方法需要等待,那么这段程序(button1_click)会在await处暂停等待,进程则会回到UI进程继续处理其它事情,当await等待完毕,进程再从UI进程回到这里继续执行。
4、自己编写的带返回值的异步方法要使用Task<返回值类型>来表示返回值。异步方法(async方法)当中,如果是以下两种情况之一:1. await另一个异步方法2. 创建一个线程,并等待这个线程的信号这个async方法才会真的被作为异步方法处理,否则和同步方法没有区别。
5、如图是一些函数对应的异步版本。这些异步版本和同步版本的区别是,创建了线程并等待线程信号。使用async和await方便了我们进行任务切换,但是追根溯源,每一个异步方法的根源上总是有新线程的创建。
6、await关键字的使用位置灵活,如图是在using块之中使用。基本上传统的赋值,都可以使用await变成等待赋值。
7、在async异步方法中,就可以方便的更新进度条了。注意,只有将所有耗时较长的异步方法调用都使用await关键字,才能保证UI进程每次遇到等待都返回继续响应用户操作,而不是卡在【某某_click】之中。