前言
其实不仅仅是C#编程,在计算机技术发展迅猛的今天,用户对程序响应速度的要求越来越高,彼时动不动就弹出“无法响应”框的程序早已不能满足用户体验,迟早会被时代所淘汰。本人接触过前端开发中的异步编程核心技术——Ajax,在某种程度上,Ajax与作为后端语言的C#的异步编程相比,核心思想基本一致。Ajax中,核心对象是XMLHttpRequest,该对象可以在不向服务器提交整个页面的情况下,实现局部更新网页(通过JavaScript与DOM)。当页面全部加载完毕后,客户端通过该对象向服务器请求数据,服务器接受数据并处理后,向客户端返回数据。
C#异步编程总览
1)Asynchromous Programming Model——异步编程模型
2)C# 5.0中引入的async/await
3) HttpClient
1)APM
异步编程模型这个模式,就是微软利用委托和线程池帮助开发者实现的一个模式,该模式利用一个线程池区执行一个操作,执行后会立即将控制权返回给调用线程,此时线程池会在后台进行这个异步操作;异步操作完成之后,通过回调函数来获取异步操作返回的结果。
举例说明
同步方法:
public override int Read(byte[]array,int offset,int count);
异步方法:public override IAsyncResult BeginRead(byte[] array,int offset, int numBytes, AsyncCallback userCallback, object stateObject);
public override int EndRead(IAsyncResult asyncResult); //结束异步操作
2)Async/Await
注意:有当async和await关键字同时出现,该方法才被转换为异步方法处理。
被async关键字标识的方法不会影响方法是同步还是异步运行并完成,而是,它使方法可被分割成多个片段,其中一些片段可能异步运行,这样这个方法可能异步完成。
在await关键字出现的前面部分代码和后面部分代码都是同步执行的。
await关键处的代码片段是在线程池线程上执行。
使用async和await关键字实现的异步方法,此时的异步方法被分成了多个代码片段去执行的,而不是像之前的异步编程模型(APM)和EAP那样,使用线程池线程去执行一整个方法。
3)HttpClient
HttpClient是接收HttpResponseMessages和发送HttpRequestMessages的主要类。
需注意
1.可在HttpClient实例上配置扩展,设置默认的头部,取消未完成的请求和更多的设置
2.可通过一个单一的HttpClient实例,且它有自己的连接池
3.HttpClients不与特定的HTTP服务器绑定,可以使用相同的HttpClient实例提交任何HTTP请求
4.可以用HttpClient为特定的站点创建特殊的Client
5.HttpClient采用新的型模式处理异步请求使它更容易管理和协调更多的请求
实例代码(Get方法):
实例代码(Post方法):