c# - ASP.NET 异常 "Thread was being aborted"导致方法退出

标签 c# .net asp.net

在下面的代码中,有时 someFunctionCall() 会产生异常:

Thread was being aborted.

为什么代码块 B 中的代码永远不会运行? ASP.NET 是否为每个方法调用启动一个新线程?我惊讶地发现,当发生此异常时,Block 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
    // ...    
}

最佳答案

这是一个ThreadAbortException;这是一个特殊的异常,会在每个 catch block 的末尾自动重新抛出,除非您调用 Thread.ResetAbort()

Response.EndResponse.Redirect 等 ASP .Net 方法(除非您传递 false)抛出此异常以结束处理当前页面;您的 someFunctionCall() 可能正在调用其中一种方法。

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

关于c# - ASP.NET 异常 "Thread was being aborted"导致方法退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1014439/

相关文章:

c# - 在下拉列表中显示层次结构

javascript - 使用 Javascript 剥离 Base64 编码的 URL 参数

c# - 我可以使用 moq Mock<MyClass> 来模拟一个类,而不是一个接口(interface)吗?

c# - 参数化 LINQ GroupBy

c# - 没有给出与 'id' 所需的形参 'Human.Human(int, string, string, string)' 相对应的参数

c# - 如何在没有 SSRS 服务器的情况下使用 Report Viewer 控件执行 .rdl 报告?

c# - 如何从 WebAPI Controller 操作返回不同类型的模型?

c# - Devexpress gridView上下文菜单项点击

c# - 如何防止 TreeViewItem 选择?

c# - 使用 ServiceStack 作为 API Facade 层