【问题标题】:Thread was being aborted威胁已经被清除了
【发布时间】:2010-11-28 20:09:53
【问题描述】:

我正在使用 Server.Transfer。一切正常,但异常日志显示以下异常。

System.Threading.ThreadAbortException: Thread was being aborted.
   at System.Threading.Thread.AbortInternal()
   at System.Threading.Thread.Abort(Object stateInfo)
   at System.Web.HttpResponse.End()
   at System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm)
   at System.Web.HttpServerUtility.Transfer(String path)

避免上述异常的任何想法。

【问题讨论】:

    标签: asp.net multithreading server.transfer


    【解决方案1】:

    Response.End() 替换为HttpContext.Current.ApplicationInstance.CompleteRequest();

    【讨论】:

      【解决方案2】:

      将 Response.End() 替换为以下内容有助于解决问题。

      Response.Flush(); Response.Close();

      参考Can we use Response.Flush () instead of Response.End()

      【讨论】:

        【解决方案3】:

        这个问题出现在 Response.Redirect 和 Server.Transfer 方法中,因为这两个方法都在内部调用了 Response.End。

        这个问题的解决方法如下。

        对于 Server.Transfer,请改用 Server.Execute 方法。

        访问此链接以下载示例示例。 http://jayeshsorathia.blogspot.com/2012/03/thread-was-being-aborted-error-occured.html

        【讨论】:

          【解决方案4】:

          解决这个问题的另一种方法是捕获生成的错误并且不重新抛出它:

                  catch (ThreadAbortException)
                  { 
                  }
          

          【讨论】:

          • 空捕获是
          • @Rob,通常,但并非总是如此。
          【解决方案5】:

          Caling Server.Transfer 将调用始终抛出 ThreadAbortException 的 Response.End。这是一个“特殊”异常,因为虽然它可以在 catch 块中被捕获,但它总是会在 catch 块的末尾被重新抛出。我会让你的错误日志忽略 ThreadAbortExceptions。

          【讨论】:

          • Server.Transfer 将隐式调用 Response.End 对我来说很有意义。错误记录忽略 threadAbortException 是什么意思。
          • 如果您将异常记录到可持久记录系统中,我会过滤掉 ThreadAbortExceptions 或让您查询此记录系统的报告过滤掉它们。
          • 这个异常不严重是有道理的,因此我可以通过过滤掉它来忽略它..谢谢。
          【解决方案6】:

          调用Server.Transfer 会引发此异常,以停止当前方法的执行 - 如果您执行Response.Redirect,则会引发完全相同的事情。

          你有两个选择:

          • 接住并重新投掷 ThreadAbortException / 重新执行 Server.Transfer
          • 确保您 只在地方做Server.Transfer 不会被抓到的地方(推荐)

          编辑:暂且不提,http://support.microsoft.com/kb/312629 有几个其他建议可以尝试,但我仍然推荐上面的 #2。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-09-22
            • 2011-09-12
            • 2011-08-28
            • 2020-10-15
            相关资源
            最近更新 更多