从Response.Error中抛出的ThreadAbortException未被Application_Error捕获

时间:2014-10-21 22:30:53

标签: c# asp.net

我有一些调用Response.Redirect的代码会抛出ThreadAbortException。我可以看到它发生在调试器中,但是没有调用Application_Error方法。如果我 F5 ,它会在异常中断后继续执行。

如果我故意在Response.Redirect之前抛出异常,它将通过Application_Error方法。

所以我无法弄清楚为什么ThreadAbortException不会以同样的方式处理。这也是我们生产现场的两难选择。我可以看到ThreadAbortExceptions发生在开发环境中,我希望它们正在生产中发生,但是没有任何线索。生产运行良好,也许是因为我没有按照我的预期处理ThreadAbortExceptions

如果有人可以帮助解决可能发生的事情,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

ThreadAbortException基本上是一个中止线程的内部信号。它有一点特殊的例外 - 它无法被捕获(它将永远被自动重新抛出),并且不会关闭你的应用程序。

在您的情况下,它是由您使用Response.Redirect引起的 - 每当您使用结束请求的变体时,它都会执行此操作。这基本上是为了使请求短路并在不执行其余请求的情况下发送重定向。通常有更好的方法来进行重定向,但这并没有真正受到伤害。