IHttpHandler中实现异步处理和IHttpAsyncHandler中的异步处理-阿里云开发者社区

开发者社区> 技术小甜> 正文

IHttpHandler中实现异步处理和IHttpAsyncHandler中的异步处理

简介:
+关注继续查看

IHttpHandler本质上是同步运行的,即当向asp.net请求一个aspx页面,asp.net会从线程池中取出一个线程,处理此次请求。在请求未完成之前,该线程一直保持处理该请求。即使在请求的过程中,采用delegate.invoke方法,调用线程池中的线程而实现异步操作,对于这个异步调用,确实是异步的,但是处理请求的"主线程"仍然占用着资源,不能释放。

ASP.NET中,由于线程池中的线程数目是有限的,因此要使得线程尽可能得到利用,则可以通过实现IHttpAsyncHandler接口实现。IHttpAsyncHandler也是继承了IHttpHandler,但是不同的是IHttpAsyncHandler具有天生的异步能力。他比IHttpHandler多2个方法。

IHttpAsyncHandler的摘要如下:

   


  1. public interface IHttpAsyncHandler : IHttpHandler 
  2.     { 
  3.         // 摘要: 
  4.         //     启动对 HTTP 处理程序的异步调用。 
  5.         // 
  6.         // 参数: 
  7.         //   context: 
  8.         //     一个 System.Web.HttpContext 对象,该对象提供对用于向 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session 
  9.         //     和 Server)的引用。 
  10.         // 
  11.         //   cb: 
  12.         //     异步方法调用完成时要调用的 System.AsyncCallback。如果 cb 为 null,则不调用委托。 
  13.         // 
  14.         //   extraData: 
  15.         //     处理该请求所需的所有额外数据。 
  16.         // 
  17.         // 返回结果: 
  18.         //     包含有关进程状态信息的 System.IAsyncResult。 
  19.         IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData); 
  20.         // 
  21.         // 摘要: 
  22.         //     进程结束时提供异步处理 End 方法。 
  23.         // 
  24.         // 参数: 
  25.         //   result: 
  26.         //     包含有关进程状态信息的 System.IAsyncResult。 
  27.         void EndProcessRequest(IAsyncResult result); 
  28.     } 

 

BeginProcessRequest 方法返回的是IAsyncResult接口,通常在BeginProcessRequest中处理一些比较繁重费时的任务,比如IO操作,读取Web服务等。一旦异步操作完成之后,则可以通过EndProcessRequest方法获得异步的结果。

IHttpAsyncHandler的好处在于,在它处理异步方法的时候,处理请求的线程可以暂时得到释放,而有空闲去处理其他请求,等异步方法运行完毕之后,在由线程去处理接下来的请求。因此,在处理某些特殊任务的时候,比较高效。

下面的一个小示例,演示如何使用IHttpAsyncHandler。使用起来很简单,实现BeginProcessRequest,返回一个异步操作的状态,IAsyncResult。当异步操作完成后,打印出异步操作的结果。

 


  1. public class Handler2 : IHttpAsyncHandler 
  2.     { 
  3.         Func<int> f = () => 
  4.         { 
  5.             Thread.Sleep(5000); 
  6.             int sum = 0; 
  7.             for (int i = 1; i <= 100; i++) 
  8.             { 
  9.                 sum += i; 
  10.             } 
  11.             return sum; 
  12.         }; 
  13.  
  14.         public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) 
  15.         { 
  16.             context.Response.ContentType = "text/plain"
  17.             IAsyncResult areault = f.BeginInvoke(cb, context); 
  18.             return areault; 
  19.         } 
  20.  
  21.         public void EndProcessRequest(IAsyncResult result) 
  22.         { 
  23.             var context = result.AsyncState as HttpContext; 
  24.             context.Response.Write(f.EndInvoke(result)); 
  25.         } 
  26.  
  27.         public bool IsReusable 
  28.         { 
  29.             get { throw new NotImplementedException(); } 
  30.         } 
  31.  
  32.         public void ProcessRequest(HttpContext context) 
  33.         { 
  34.             throw new NotImplementedException(); 
  35.         } 
  36.     } 

 

个人总结,有不对的地方,请提出交流。














本文转自cnn23711151CTO博客,原文链接: http://blog.51cto.com/cnn237111/1100009,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
server2008  iis7,出错上面的错误 . 提示的原因可能是net未完整安装导致的. 解决方法:  1、开始->运行cmd命令窗->以管理员身份运行: %windir%\Microsoft.
890 0
阿里云SLB漏选“健康检查正常的http状态码”导致url重定向失败问题处理
阿里云SLB健康检测状态码选择不正确,导致nginx url重定向的网站访问失败处理流程。
7630 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
6919 0
asp.net发布到IIS中出现错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
开发web项目时需要安装IIS,在安装好IIS的Windows7本上发布asp.net网站时,web程序已经映射到了本地IIS上,但运行如下错误提示“处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“Man...
805 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7761 0
大数据分析与处理方法介绍
从所周知,大数据已经不简简单单是数据大的事实了,而最重要的现实是对大数据进行分析,只有通过分析才能获取很多智能的,深入的,有价值的信息。那么越来越多的应用涉及到大数据,而这些大数据的属性,包括数量,速度,多样性等等都是呈现了大数据不断增长的复杂性,所以大数据的分析方法在大数据领域就显得尤为重要,可以说是决定最终信息是否有价值的决定性因素。
1380 0
Asp.Net Web API 2第七课——Web API异常处理
原文:Asp.Net Web API 2第七课——Web API异常处理 前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.
783 0
+关注
6323
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载