【问题标题】:Asp.net commands still running ? but why?Asp.net 命令仍在运行?但为什么?
【发布时间】:2012-01-01 20:07:44
【问题描述】:

我有这种情况:

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

问题来了:

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

long work 现在会发生什么?

我猜它还在继续……

但问题是为什么?

Long工作不知道他的主要祖先线程被终止了吗?

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

long func 与 b.aspx / a.aspx 之间是否存在任何关系?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      服务器仅在完成按钮1_Click 功能时才会停止,即使您关闭也是如此。 关闭浏览器时线程并没有终止,服务器只知道你发出了运行button1_Click函数的请求,不知道浏览器是否还在运行。

      【讨论】:

        【解决方案3】:

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

        在我看来 b.aspx 确实应该是一个 Web 服务,但您仍然需要弄清楚如何取消“进行中”的请求。

        没有办法做到这一点。不过,这听起来确实像是一个有趣的“开发者日”:)

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-04-26
            • 2015-12-21
            • 1970-01-01
            • 2012-02-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-01-01
            相关资源
            最近更新 更多