如何开发ASP.NET MVC异步式(Async)处理应用

这个假期抽了点时间,在家准备一个项目的技术方案。特地对ASP.NET MVC框架下开发异步模式(ASync)应用做了一番研究。

 

这个项目的目标是开发出一个WEB应用,该应用的并发业务请求量非常大,而业务的处理,则大部分由第三方系统提供的Web Service完成。

 

为了提高系统的吞吐量,采用异步式模型来调用第三方的Web Service是最好的选择。在此,先简单介绍一下异步式模型的好处。

 

IIS内有一个工作线程池,处理每个HTTP请求时,都会由工作线程池的一个线程进行处理,当该线程在执行对外部资源的请求时,比如说,数据库请求、Web Service,该线程就会堵塞,等到外部资源请求返回时,才会继续执行。由于工作线程的数量有限,当HTTP请求的进入数目超过工作线程可以处理的速度时,IIS就会将请求放进请求队列里,当队列满了以后,新的请求就会出现503错误。

 

如果采用异步式模型,则外部资源的请求可以交由IIS外部的另一个线程池的线程负责,IIS的工作线程不会堵塞,而是立即返回,继续处理下一个请求,当外部线程将外部资源返回的结果获得后,再唤醒IIS工作线程池的空闲线程,完成后续的代码处理,并将结果返回给请求发出者。

 

由此可见,采用异步式模型最大的好处是,将耗时的外部资源请求操作与IIS工作线程的工作并行处理了,提升了IIS工作线程的处理效率,缩短了请求的等待时间,从而提升了IIS的吞吐量。

 

要实现WEB应用的异步式处理,也很简单。大致可以分以下几步:

 

一、将一个同步调用的方法转换为支持异步式调用

平时大家开发的类的方法,都是支持同步式调用的,如果这个方法要用在异步式调用中,则要做一些改造。

根据MSDN的介绍,实现一个异步式调用的方法有三种设计模式:

异步编程模型(Asynchronous Program Model),简称APM。

基于事件的异步模型(Event-based Asynchronous Pattern),简称EAP。

基于任务的异步模型(Task-based Asnychronous Pattern),简称TAP。

 

其中,以APM实现最简单。

首先,定义一个delegate,该delegate的签名跟同步方法一样。

.NET对delegate有一个内置的异步式调用支持,任何delegate都缺省有BeginInvoke和EndInvoke两个调用方法。请看以下举例。

一个同步方法的定义如下:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值