我有这种情况:
当a.aspx加载时 - 我按下按钮1。
这是一个问题:
按下按钮1后 - 关闭浏览器。
现在long work
现在发生了什么?
我想它会继续......
但问题是为什么?
长期工作是否知道他的主要祖先线程被终止了?
实际上他的父亲线程也被终止了(b.aspx线程)长函数与b.aspx / a.aspx之间是否存在任何关系?
答案 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
。