要想了解asp.net 2.0的异步页的处理过程,先列出页面的生命周期:

1 :init 事件: 页面初始化 ,初始化设置。

2: loadviewstate方法: 加载视图状态, 填充viewstate属性。

3 :loadpostdata方法: 处理回发数据, 处理传入窗体数据。

4: load 事件: 加载页面 ,页面控件初始化完成并反映了客户端的数据。

5 :raisepostdatachangedevent方法: 回发更改通知 引发更改事件。

6 :raisepostbackevent方法: 处理回发事件 ,处理引起回发的客户端事件,并在服务上引发相应时间。

7: prerender事件: 页面预呈现 。

8 :saveviewstate方法: 保存视图状态, 将viewstate属性保存到字符串中。

9 :render方法: 呈现页面 。

10: dispose方法: 处置是否对昂贵资源的引用。

11 :unload事件: 卸载页面 。

页面处理方式:

1:同步处理;

2:异步处理。

同步请求过程:

1:asp.net 收到页面请求时,从线程池中提取一个线程并将请求分配给该线程。

2:页在该请求期间保留线程,防止该线程用于处理其他请求。

3:如果一个同步请求需要运算时间较长,此时分配给该请求的线程在调用返回之前处于挂起状态。

4:等待线程返回后完成页面的其它生命周期。

同步请求的生命周期和线程关系图:

同步请求的问题

线程池的可用线程是有限的,如果此时请求过多,asp.net 因 503“server unavailable”错误使后续请求失败。这让asp.net能够接收的请求量会大大减少,影响了可伸缩性。

异步的处理过程:

前面的两点和普通同步请求一样,不同的是对于比较费时的过程的处理方式:

1:一个异步操作开始响应 asp.net 的信号之后,该线程返回线程池。

2:asp.net 调用使用 addonprerendercompleteasync 注册的 begin 方法。begin 方法的任务是启动诸如数据库查询或 web 服务调用的异步操作,并立即返回。

3:线程返回到线程池。同时,begin 方法返回 iasyncresult。

4: asp.net 从线程池提取线程并调用 end 方法。

5:当 end 返回之后,asp.net 执行该页生命周期其余的部分。

异步请求的生命周期和线程关系图:

异步的优势:

线程池线程得到了高效的使用,提高了可伸缩性。原来挂起等待的线程现在可用于服务其他请求。

异步加载数据的示例:

第一步:让页面支持异步。设置async属性。

第二步:因为是操作数据库,想让数据库支持异步,需要对数据库连接串进行配置。

asynchronous processing=true。

第三步:在页面的page_load事件中注册异步事件。

protected void page_load(object sender, eventargs e)
        {
            addonprerendercompleteasync(
    new begineventhandler(beginasyncoperation),
    new endeventhandler(endasyncoperation)
);
        }
iasyncresult beginasyncoperation(object sender, eventargs e, asynccallback cb, object state)
        {
            string sql = "select top 10 * from dbo.card_ext";

sqlconnection _conn = new sqlconnection(configurationmanager.

appsettings["dataaccesscontionstringread"].tostring());

_conn.open();
            sqlcommand cmd = new sqlcommand(sql, _conn);

iasyncresult risynresult = cmd.beginexecutereader(cb, cmd,

commandbehavior.closeconnection);

return risynresult;
        }
        void endasyncoperation(iasyncresult iresult)
        {
            if (!iresult.iscompleted)
            {
                iresult.asyncwaithandle.waitone();
            }
            else
            {
                sqldatareader dr = (iresult.asyncstate as sqlcommand).endexecutereader(iresult);
                if (!dr.isclosed)
                {
                    list<string> _list = new list<string>();
                    while (dr.read())
                    {
                        _list.add(dr[0].tostring());
                    }
                    this.gridview1.datasource = _list;
                    this.gridview1.databind();
                }
                dr.close();
            }
        }

.net下比较常用的异步处理场景:

1:filestream,即我们常说的i/o操作:

2:socket;

3:sqlcommand,例如:beginexecutereader、beginexecutenonquery。

4:webrequest,像抓取网页等操作;

5:webservcie的调用。

异步调用应该注意的地方:

下面的程序也是合法的。这种方式虽然也是异步调用,但是和同步调用效果一样,因为endexecutereader方法会让当前线程挂起,直到返回结果。 从性能角度和资源上讲,比直接用同步效果更差,因为系统要多启动一个线程。比较好的做法就是采用回调方式,具体做法可以参考上面的代码。

cmd.beginexecutereader(commandbehavior.closeconnection);
cmd.endexecutereader(risynresult);

asp.net异步页面与ajax异步的效果区别:

1:asp.net的异步页面让我第一想法是和ajax效果比较,ajax应用在比较费时的方法上,当数据加载时,在页面显示数据的区域先用一段提示文 字,例如:数据正在加载中...之类的,无论这个方法多么费时,它只影响这一块的数据显示,页面其它区域不受影响(如果速度不慢的话)。而asp.net 异步页面并不能达到这种效果,从上面的异步执行流程图可以看出,异步调用的事件发生在onprerendercomplete中,就是说在页面中生命周期 之内,页面要想完全呈现给用户,必须等待异步方法返回结果。例如,一个费时的异步io方法,需要费时10s,那么用户要想看到页面,起码在10s以上。

2:异步页面增加的是处理请求的数量,线程池线程得到了高效的使用,提高了可伸缩性,而ajax是在页面加载完成之后根据返回结果调用回调函数操作dom完成数据加载。
       异步任务:

asp.net 2.0 中引入了另一个方法来简化异步操作: registerasynctask,比 addonprerendercompleteasync 具有以下优势。
            1:除了 begin 和 end 方法,registerasynctask 允许注册当异步操作长时间无法完成时调用的超时方法。设置 @ page 指令中 asynctimeout 属性设置超时。
            2:可以在一个请求中多次调用 registerasynctask 来注册若干异步操作。
            3:可以使用 registerasynctask 的第四个参数将状态传递给 begin 方法。这个参数一般设置为null。

    registerasynctask 的异步页与依赖于 addonprerendercompleteasync 的异步页相类似。需要将该页的 asyncmode 属性设置为 true,且与通过 prerender 事件执行,此时调用使用 registerasynctask 注册的 begin 方法,而不是addonprerendercompleteasync ,而且进一步保持请求处理直到最后一个操作完成。

总结:

正确的使用好asp.net中的异步页面在某些环境下能够使得应用程序性能得到优化。

注:

本文引用:

1:http://www.cnblogs.com/jeffreyzhao/archive/2008/02/24/use-async-operation-properly.html

2: http://dev.yesky.com/msdn/189/2396189.shtml

转载于:https://www.cnblogs.com/leeolevis/archive/2009/02/24/1396950.html

asp.net中的异步页面相关推荐

  1. 在ASP.NET中指定出错页面,不让代码外泄!

    在ASP.NET中指定出错页面,不让代码外泄!在ASP.NET中原始的出错页面会暴露部分源代码,由此带来了潜在的安全隐患. ASP.NET允许应用程序出错时显示用户指定的页面,方法是在web.conf ...

  2. ASP.NET—015:ASP.NET中无刷新页面实现

    原文作者:杨友山 原文地址:http://blog.csdn.net/yysyangyangyangshan/article/details/39679823 前面也说过在asp.net中前后前交互的 ...

  3. asp.net编程:asp.net中如何设置页面的编码

    在用ASP.NET写网上支付的接口程序时,遇到一个奇怪问题,通过表单提交过去的中文全是乱码,英文正常.而用asp程序进行测试,可以正常提交 中 文,asp页面中有这样的HTML代码: < met ...

  4. Asp.Net中跳转页面有那几种方法

    一.方法 1.<a href="Default.aspx">跳转</a> 2.<asp:HyperLink id="HyperLink1&q ...

  5. asp.net中关于静态页面生成的代码实例

    目前网页html静态化是利用其它的动态技术生成html静态页面,还不是静态网站.因为的确是这样的,生成html静态网页有一定的好处.      一.加快页面打开浏览速度,静态页面无需连接数据库教程打开 ...

  6. 在asp.net中使用异步同步rss

    有的时候我们需要在网页里读取论坛的信息,在传统ASP的时候我们使用的是JS或者是IFRAME,这两种方式都不是很方便,而且对搜索引擎不友好.现在有了.Net,我们有了另一种方式. 要求:论坛需要提供R ...

  7. ASP.NET 2.0的异步页面刷新真给劲

    ASP.NET 2.0的异步页面刷新功能真得很酷,今天尝试用它解决我的一个应用问题,真是帮了大忙了. 我的页面要向后台的socket服务提交一个查询,首先这是一个可能长时间不返回的操作:其次为了拿到s ...

  8. ajax异步查询demo,ASP.NET中AJAX的异步加载(Demo演示)

    此次的demo是一个页面,页面上有两行字,然后后面用ajax,使用一个下拉框去替换第一行文字[/code] 第一个是被替换的网页 var xmlhttprequest; function create ...

  9. ASP.Net中页面传值的几种方式

    大致概括一下,ASP.NET 页面之间传递值得方式大致可以分为如下几种:Request.QueryString["name"],Request.Form("name&qu ...

最新文章

  1. 深度残差网络 - Deep Residual Learning for Image Recognition
  2. 【Verilog HDL 训练】第 02 天
  3. 【C/C++】头文件包含之#include的2种用法区别
  4. Spring Integration Framework简介
  5. python向dict里添加_Python有条件地向Dict添加键
  6. 彻底搞懂阻塞、非阻塞、同步、异步
  7. 移动开发之设计稿转换页面单位尺寸
  8. 最易理解的傅里叶分析讲解
  9. FreeBSD 8.0候选版本RC2发布
  10. 计算机网络经典试题答案,2016年计算机软考网络工程师经典练习试题及答案
  11. 尔雅 科学通史(吴国盛) 个人笔记及课后习题 2018 第四章 中国独立发展的科技文明
  12. vscode插件查找并导出到新电脑
  13. 2006年中国首届杰出数据库工程师评选面试实录
  14. java ssh详解_JAVA SSH 框架介绍
  15. ⭐️UI自动化控制微信发送或转发图片消息✨
  16. 同个网络的两台计算机怎么设置局域网,两台电脑怎么样连在同一个局域网
  17. RK3568 Android11从入门到实战项目专栏目录及介绍
  18. EasyUI(1):快速搭建系统界面
  19. Hibernate各种查询方法
  20. 国家、省、市、县 四级联动 JS源码

热门文章

  1. linux NTP服务
  2. 网络丢包诊断与分析的现实与理想
  3. 《互联网+ 电商平台设计与运营》一一2.4 小结
  4. 新装WIN7 UPDATE 无法更新
  5. 调用android自带的下载功能,进度在消息通知栏上显示
  6. A-Webkit第四章:添加学生
  7. 在taobao上安家了,欢迎大家来选购呀
  8. matlab打开时总闪一下才打开_大家装窗帘轨道时,是不是多数都是下面这样的: 打开网易新闻 查看更多图片 或者做个窗帘盒,遮盖一下?...
  9. 修改smb默认端口_centos7 ssh端口更改方法
  10. 波卡生态预言机ROOM上线Uniswap,最高涨幅达862%