ASP.NET异常"线程被中止"导致方法退出

Rya*_*son 21 .net c# asp.net

在下面的代码中,someFunctionCall()有时会生成"Thread is aborted"异常.为什么代码块B中的代码永远不会运行?ASP.NET是否为每个方法调用启动一个新线程?我很惊讶地看到,当发生此异常时,块b中的代码永远不会运行,该方法返回,并且我的应用程序继续运行.有人可以解释一下吗?

谢谢.

public void method()
{
     // CODE BLOCK A
     //...    

     try 
     {
         someFunctionCall(); // this call is generating thread abort exception
     }
     catch(Exception ex)
     {
         // log exception message
     }

    // CODE BLOCK B
    // ...    
}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 34

这是一个ThreadAbortException; 这是一个特殊的异常,除非你打电话,否则会在每个catch块的末尾自动重新抛出Thread.ResetAbort().

ASP .NET方法类似Response.EndResponse.Redirect(除非你通过false)抛出此异常来结束当前页的处理; 你someFunctionCall()可能正在调用其中一种方法.

ASP .Net本身处理此异常并调用ResetAbort继续处理.

  • 在catch块中调用Thread.ResetAbort.另外,询问供应商异常的来源.什么是异常的堆栈跟踪? (3认同)