C#学习心得(二) 异步编程

来源:互联网 发布:淘宝修改销量 编辑:程序博客网 时间:2024/05/17 02:57

         异步编程是指程序在执行异步操作时,无法马上获得结果,而在异步操作过程中,程序可以执行其他操作,当异步操作完成时,通过状态,通知,回调等来告知调用者。异步编程的好处是显而易见的,比如WEB应用,如果不是采用异步编程,那么当客户端向服务器发送请求时,在得到服务器响应的过程中,客户端都处于一种等待状况,用户无法对其进行相关的操作,这样的用户体验显然是非常差的。

        C#异步编程有3种实现方式,第一种是APM(Asynchromous  Programming  Model ),.net类库中的Beginxxx和Endxxx方法其实就实现了异步编程,当然用户也可以自定义实现异步操作的类,要求这个类实现返回类型为IAsyncResult的Beginxxx和Endxxx方法。

       第二种是 async  /  await  ,一下为教科书上的一段代码,

async  Task<int>  AccessTheWebAsync()   {  HVpClientclient = new HVpClient();  Task<string> getStringTask = client.GetStringAsync("hVp://msdn.microsod.com");    DoIndependentWork();  string  urlContents  =  await  getStringTask;    returnurlContents.Length;   }

这种方式有一个问题需要特别注意,就是对于只标识async关键字的(指在方法内没有出现await关键字)的方法,调用线程会把 该方法当成同步方法一样执行,所以还是会堵塞GUI线程,只有当async和await关键字同时出现,该方 法才被转换为异步方法处理。


        第三种为HttpClient和WebClient,HttpWebRequest有一些区别:

1、在HttpClient实例上配置扩展,设置默认的头部,取消未完成的请求和更多的设置。    

 2、你通过一个单一的HttpClient实例,它有自己的连接池。    

 3、HttpClients不与特定的HTTP服务器绑定,你可以使用相同的HttpClient实例提交任 何HTTP请求。    

4、你可以用HttpClient为特定的站点创建特殊的Client    

5、HttpClient采用新的型模式处理异步请求使它更容易管理和协调更多的请求


0 0
原创粉丝点击