提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2009-04-07 09:40:26.000|阅读 430 次
概述:对于ASP.NET pages的请求需要有HTTP handler来处理,比如Page的instance。当有一个request来请求某个.aspx页面时,ASP.NET runtime会从ASP.NET thread pool中选一个thread来处理这个request, 并且在这个请求处理完成时释放这个thread。
#慧都22周年庆大促·界面/图表报表/文档/IDE/IOT/测试等千款热门软控件火热促销中>>
对于ASP.NET pages的请求需要有HTTP handler来处理,比如Page的instance。当有一个request来请求某个.aspx页面时,ASP.NET runtime会从ASP.NET thread pool中选一个thread来处理这个request, 并且在这个请求处理完成时释放这个thread。因此,如果这个 request请求的页面中的某一个Step花费了相对较长的时间,比如调用某个web service来获取数据,那么结果就是处理这个请求的thread会一直处于idle的状态,而不能处理新的请求。而之所以这个thread会处于idle的状态,是由于ASP.NET handler处理请求时采用的是同步的方式。
为了解决这个问题,在ASP.NET 1.0中可以通过实现IHTTPAsyncHandler来实现异步的方式。而在ASP.NET 2.0之后,实现异步方式变得了更加的简单了。本文就介绍两种实现异步的方法。
1. Asynchronous Pages
要将一个普通的ASP.NET页面变成一个asynchronous page,只需要在 @Page directive 设置 Async=”true” 就可以了。
<%@ Page Async="true" %>
除此之外,还需要在Page_Load事件中来注册需要完成的异步事件。在Asynchronous page中,可以通过调AddOnPreRenderCompleteAsync这个方法来注册,注册一对Begin/End的event handler。
1: AddOnPreRenderCompleteAsync(
2: new BeginEventHandler(BeginTask),
3: new EndEventHandler(EndTask));
BeginEventHandler的方法签名
IAsyncResult BeginTask(object sender, EventArgs e, AsyncCallback cb, object state)
EndEventHandler的方法签名就相对的简单了
void EndTask(IAsyncResult ar)
那么注册的异步事件是在什么时候被执行的呢?在PreRenderComplete之前,你注册了异步事件,注册的BeginEventHandler事件就会开始执行。当异步事件执行完成后,Page就会从PreRenderComplete开始,继续完成生命周期中剩下的各个事件。为了验证异步事件是否确实是在这个PreRenderComplete事件中被执行的,我们可以再 Begin/End 事件中往页面的Trace中写入信息,并打开页面的Trace,然后看输出的Track信息
如下:
|
aspx.page |
Begin PreRender |
0.000143719091709968 |
0.000011 |
|
aspx.page |
End PreRender |
0.000170049306985077 |
0.000026 |
|
Begin asyc: Thread=6 |
0.00101590747269794 |
0.000846 |
|
|
End async: Thread=7 |
2.20676898637082 |
2.205753 |
|
|
aspx.page |
Begin PreRenderComplete |
2.20682859505263 |
0.000060 |
|
aspx.page |
End PreRenderComplete |
2.20684834271408 |
0.000020 |
从Trace信息中可以看出,注册的异步事件就是在PreRender和PreRenderComplete之间执行的。
除了AddOnPreRenderCompleteAsync之外,还可以用 RegisterAsyncTask 来注册异步事件。甚至,RegisterAsyncTask 也许是一个更好的方法。
PageAsyncTask task = new PageAsyncTask(new BeginEventHandler(BeginTask),new EndEventHandler(EndTask),null,null);RegisterAsyncTask(task);
RegisterAsyncTask 接受一个PageAsyncTask参数,这个task参数中可以设置的除了 Begin/End 事件外,还可以做一些别的设置,如timeout时的handler等。timeout的默认时间是45秒,这个时间可以在 @Page directive中和web.config文件中进行设置
什么样的操作应该或者建议使用async的操作呢? 大致上, CPU bound 或者 I/O bound的操作可以考虑采用异步的方式。尤其是在有大量IO操作的方法。这时,大量的时间都花费在了读取/写入或者操作数据上,这时,cpu就处于idle的状态,等待IO操作的完成
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@hmdbvip.cn
文章转载自:博客园



接DevExpress原厂商通知,将于近日上调旗下产品授权价格,现在下单客户可享受优惠报价!
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@hmdbvip.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
永利最大(官方)网站