原来一直以为Asp.Net中的异步就是Ajax中的异步。可以让Web界面加载完一部分就显示一部分,经过多方检阅资料后发现Asp.Net的异步根本就不是这么一回事。
要了解Asp.Net 2.0中的异步处理过程,就得先清楚Page页面的生命周期,详细请参见本站
Asp.Net中Page页的生命周期一、Asp.net同步处理过程:1,服务器在接收到页面请求后,从线程池中分出一个分配给该线程。
2,该页在执行完毕前,该线程一直处于保留状态,以防止该线程分配给其它的请求。
3,如果该页运算时间很长,此时该线程一直处于挂起状态。
4,该页完成一个生命周期,该线程得已释放。
此时可能会遇到的问题就是:线程池中的可用线程是有限的,如果请求过多,Asp.Net会因503“server unavailable”错误使后续请求失败。
同步请求中生命周期与线程关系图:
二、Asp.Net异步处理过程:1,服务器开始接收asp.net的请求之后,当前线程立即返回线程池。
2,asp.net调用注册的BeginEventHandler方法,并立即返回。
3,线程返回到线程池。同时BeginEventHandler方法返回一个IAsyncResult。
4,如果BeginEventHandler方法超时,asp.net会调用TimeoutHandler方法。
5,如果在规定时间内返回,asp.net从线程池提取线程并调用EndGetAsyncData方法。
6,当EndGetAsyncData方法返回之后,asp.net开始执行该页生命周期其余的部分。
这样就弥补了同步中当前线程一起被挂起的问题,原来被挂起的线就可以服务于另外的请求。
异步请求中生命周期与线程关系图:
注意:如查想让你的Page页支持异步,一定要设置Page的Async属性为true.
总结:使用好Asp.Net中的异步处理,可以使你的程序性能得到优化。N0T餝u髞坃YS