6.20上课整理

异步编程:一个异步过程调用发出后,调用者不能立刻得到结果。基于事件机制,实际处理这

个调用的部件在完成后,通过状态、通知和回调来通知调用者。


一般的编程为同步编程,程序会一直等待直到响应为止,甚至会陷入无响应状态(想必大家深有体会)



1.APM(Asynchromous Programming Model)

可在自定义的类中实现返回类型为IAsyncResult接口的BeginXXX方法和EndXXX
方法来实现


委托类型也定义了BeginInvoke和EndInvoke方法


例子:

同步方法:public override int Read(byte[]array,int offset,int count);

异步方法:public override IAsyncResult BeginRead(byte[] array,int offset, int numBytes, AsyncCallback userCallback, object stateObject);  

                   //若不希望异步操作完成后调用任何代码,可以把userCallback参数设置为null

                    public override int EndRead(IAsyncResult asyncResult);  //结束异步操作




异步编程模式是利用委托和线程池线程搞出来的模式,包括基于事件的异步编程和基于任务的异步编程

该模式利用一个线程池线程去执行一个操作,该线程池线程会立即将控制权返回给调用线程,此时线程池
线程在后台进行这个异步操作;异步操作完成之后,通过回调函数来获取异步操作返回的结果。此时就是利用委托的机制。


2.C# 5.0 async / await

只有当async和await关键字同时出现,该方法才被转换为异步方法处理


被async关键字标识的方法不会影响方法是同步还是异步运行并完成,而是,它使方法可被分割成多个片段,其中一些片段可能异步运行,这样这个方法可能异步完成

在await关键字出现的前面部分代码和后面部分代码都是同步执行的

await关键处的代码片段是在线程池线程上执行

使用async和await关键字实现的异步方法,此时的异步方法被分成了多个代码片段去执行的,而不是像之前的异步编程模型(APM)和EAP那样,使用线程池线程去执行一整个方法。


例:



3.HttpClient:接收HttpResponseMessages和发送HttpRequestMessages的主要类

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

可通过一个单一的HttpClient实例,且它有自己的连接池

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值