+ -
当前位置:首页 → 问答吧 → 执行到一半中途刷新的问题

执行到一半中途刷新的问题

时间:2011-12-17

来源:互联网

假定a.aspx页面,Page_Load事件,有4步流程:a, b, c, d。如果执行到b,还没执行完,刷新该页面的时候,后台会不会继续执行剩下的c,d两步流程,再从头开始执行,还是马上就从头开始?

作者: Corn1   发布时间: 2011-12-17

Page_Load没执行完,能生成html发送给浏览器吗?即使能的话,原方法也会继续执行下去的。刷新页面等于重新new了一个页面实例,重新执行的是新实例的Page_Load方法,原页面实例的Page_Load方法其实早就执行完毕了。

作者: dalmeeme   发布时间: 2011-12-17

我现在的情况就是页面还没加载完毕的时候,客户点了刷新。因为业务流程比较复杂,所以客户等不下去了...

作者: Corn1   发布时间: 2011-12-17

解决的办法是在页面弹出一个MODE窗口,显示执行的进度,知道完成自动关闭。
这样可以阻止用户刷新

作者: herichcq   发布时间: 2011-12-17

引用楼主 corn1 的回复:
假定a.aspx页面,Page_Load事件,有4步流程:a, b, c, d。如果执行到b,还没执行完,刷新该页面的时候,后台会不会继续执行剩下的c,d两步流程,再从头开始执行,还是马上就从头开始?


其实这跟不同的浏览器、你的页面脚本的设计等等都有关系。

有人写asp.net程序,总以为如果只有一个用户操作,那么服务器同一时间只可能接收到一条请求。其实这是错误的。用户在页面刷新缓慢时,不但会“狂点鼠标”,而且会尽量去尝试“回退”等各种操作。在一个貌似单一一条操作线索的程序运行时,服务器收到同一用户多条相互冲突的请求消息,是完全“正常”的。所以你写程序就应该在极限条件下——无条件并发的条件下,仍然逻辑正确,不会给数据中插入错误的结果。

作者: sp1234   发布时间: 2011-12-17

假设“刷新”时会执行到a,那么在b还没有执行完的时候前端“刷新”,那么你执行的就是 a,b,a,b,c,d。

作者: sp1234   发布时间: 2011-12-17

如果一定要有一个顺序,那么ababcd没或者aabbcd都有可能。因为刷新时这个新的a既可能在b之前到达(后发出的消息先到达),也可能在其之后到达,其实更常见的是多线程并发处理。

作者: sp1234   发布时间: 2011-12-17

多谢sp1234
我的abcd四个步骤,都是有关数据库的操作。如果我把这四个步骤都写在一个存储过程里的话,那么,当存储过程执行到一半的时候客户刷新,会出现什么情况?

作者: Corn1   发布时间: 2011-12-17

多谢sp1234
我的abcd四个步骤,都是有关数据库的操作。如果我把这四个步骤都写在一个存储过程里的话,那么,当存储过程执行到一半的时候客户刷新,会出现什么情况?

作者: Corn1   发布时间: 2011-12-17