网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

详细解读ASP.NET的异步

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/01/05
以看到,从始至终只由3个线程处理所有的请求,总共时间约5.12秒。

为简化分析,我们用下面的图来示意异步处理程序的并发处理过程。

498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/5/B515529720.png" />

这样,我们就可以通过异步的方式,将WEB线程撤底释放出来。由WEB线程进行请求的接收与结束处理,耗时的操作与等待都进行异步处理。这样少量的WEB线程就可以承受大量的并发请求,WEB线程将不再成为系统的瓶颈。

在大并发的异步模式下,和前面的数据相比较,可以看到HttpApplication的对象数量随并发处理数提高而提高,随之带来的一系列数据结构,如 HttpHandler缓存,是需要考虑的内存开销。同时,在异步模式下,请求的完成需要编程的方式来控制,在触发完成前,客户端连接、 HttpContext对象都保持活动状态,客户端也一直保持等待,直到超时。因此,异步模式下需要更细致的资源操作。

我们来看ASP.NET异步 的典型应用场景。

场景一:处理过程中有需要等待的任务,并且可以使用异步完成的。

  1. //同步方法  
  2. public void ProcessRequest(HttpContext context)  
  3. {  
  4.     FileStream fs = new FileStream("", FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 4096, FileOptions.Asynchronous);  
  5.     fs.CopyTo(context.Response.OutputStream);  
  6. }  
  7.       
  8. //异步方法开始  
  9. public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)  
  10. {  
  11.     FileStream fs = new FileStream("D:\\a.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 4096, FileOptions.Asynchronous);  
  12.     var task = fs.CopyToAsync(context.Response.OutputStream);  
  13.     task.GetAwaiter().OnCompleted(() => cb(task));  
  14.     return task;  
  15. }  
  16.  
  17. //异步方法结束  
  18. public void EndProcessRequest(IAsyncResult result)  
  19. {  

这个处理程序读取服务器的文件并输出到客户端。

  1. //同步方法  
  2. public void ProcessRequest(HttpContext context)  
  3. {  
  4.     var url = context.Request.QueryString["url"];  
  5.     var request = (HttpWebRequest)WebRequest.Create(url);  
  6.     var response = request.GetResponse();  
  7.     var stream = response.GetResponseStream();  
  8.     stream.CopyTo(context.Response.OutputStream);  
  9. }  
  10.       
  11. //异步方法开始  
  12. public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)  
  13. {  
  14.     //构建异步结果并返回  
  15.     var result = new WebAsyncResult(cb, context);  
  16.  
  17.     var url = context.Request.QueryString["url"];  
  18.     var request = (HttpWebRequest)WebRequest.Create(url);  
  19.     var responseTask = request.GetResponseAsync();  
  20.     responseTask.GetAwaiter().OnCompleted(() =>  
  21.     {  
  22.         var stream = responseTask.Result.GetResponseStream();  
  23.         stream.CopyToAsync(context.Response.OutputStream).GetAwaiter().OnCompleted(() =>  
  24.         {  
  25.             result.SetComplete();  
  26.         });  
  27.     });  
  28.  
  29.     return result;  
  30. }  
  31.  
  32. //异步方法结束  
  33. public void EndProcessRequest(IAsyncResult result)  
  34. {  

  • 上一篇资讯: ASP.NET显示渐变图片
  • 网学推荐

    免费论文

    原创论文

    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号