在下面的代码中,有时 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.End
或 Response.Redirect
等 ASP .Net 方法(除非您传递 false
)抛出此异常以结束处理当前页面;您的 someFunctionCall()
可能正在调用其中一种方法。
ASP .Net 本身会处理此异常并调用 ResetAbort
继续处理。
关于c# - ASP.NET 异常 "Thread was being aborted"导致方法退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1014439/