Asp.net命令还在运行吗?但为什么?

时间:2012-01-01 20:07:45

标签: asp.net .net sql-server-2005

我有这种情况:

enter image description here

当a.aspx加载时 - 我按下按钮1。

这是一个问题:

按下按钮1后 - 关闭浏览器。

现在long work现在发生了什么?

我想它会继续......

但问题是为什么?

长期工作是否知道他的主要祖先线程被终止了?

实际上他的父亲线程也被终止了(b.aspx线程)

长函数与b.aspx / a.aspx之间是否存在任何关系?

4 个答案:

答案 0 :(得分:2)

即使您关闭,服务器也会在完成功能button1_Click后停止。 当您关闭浏览器时,线程没有终止,服务器只知道您发出了运行该功能的请求按钮1点击它不知道浏览器是否仍在运行。

答案 1 :(得分:2)

当您打开WebRequest以访问b.aspx时,您实际上正在为该页面进行HTTP GET。 B.aspx对a.aspx的线程一无所知。但是,当您关闭浏览器时,从浏览器到Web服务器(运行按钮单击处理程序)的HTTP通道将终止。但是,Web服务器不会立即注意到这一点,并且响应您的click事件的线程继续等待b.aspx WebRequest完成并最终等待长时间运行的b.aspx呈现,直到服务器超时为止。

答案 2 :(得分:1)

据我所知,您的按钮点击和b.aspx页面之间没有隐含的关系。为了取消长时间运行的线程,您需要将某种标识符立即返回到您的click方法。您还需要检测浏览器的关闭(大约5年前我上次尝试时在所有浏览器中都不可能)。然后,您需要以某种方式使用先前返回的标识符取消该“请求”。

在我看来,b.aspx应该真的是一个网络服务,但你仍然需要弄清楚如何取消“in-progess”请求。

没有这样做的烘焙方式。虽然它确实听起来像一个有趣的“开发者日”:)

答案 3 :(得分:1)

当您关闭浏览器或导航到新页面时,TCP连接将关闭,但这本身并不会导致关联的线程被终止。

通过选中this.Response.IsClientConnected,您可以在开始长时间运行的活动之前查看TCP连接是否仍处于活动状态。您也可以将长时间运行的活动分解为多个较小的块,并检查每个块之间的IsClientConnected