为什么我在ASP.NET中获得“Thread is aborted”?

时间:2011-10-02 23:44:44

标签: asp.net exception

我不确定为什么会发生这种情况并且我从未明确中止线程,所以这有点令人惊讶。但我记录了Exceptions,我看到了:

  

System.Threading.ThreadAbortException - 正在中止线程。

似乎是在致电System.Threading.WaitHandle.WaitOne时发生的。我不确定这个例外有多远。我不认为我的线程会终止,因为我抓住了日志并吞下了错误。

为什么我会收到这些错误?也许是我强行终止我的服务器或要求它重启?如果不是那么可能导致他们的原因?

7 个答案:

答案 0 :(得分:48)

不,ThreadAbortException被一个简单的Response.Redirect

抛出

答案 1 :(得分:38)

如果在Application_Start中生成线程,它们仍将在应用程序池的AppDomain中执行。

如果某个应用程序闲置一段时间(意味着没有请求进入),或者满足某些其他条件,ASP.NET将回收整个AppDomain

当发生这种情况时,您从AppDomain开始的所有主题(包括来自Application_Start的主题)都将被中止。

在此问题中,应用程序池和回收更多:What exactly is Appdomain recycling

如果您尝试在IIS/ASP.NET内运行长时间运行的流程,则简短的回答通常是“不要”。这就是Windows服务的用途。

答案 2 :(得分:34)

ASP.NET根据需要始终生成并终止工作进程。您的线程可能会被ASP.NET关闭。

旧答案:

已知问题:PRB: ThreadAbortException Occurs If You Use Response.End, Response.Redirect, or Server.Transfer

Response.Redirect ("bla.aspx", false);

try
{
    Response.Redirect("bla.aspx");
}
catch (ThreadAbortException ex)
{
}

答案 3 :(得分:14)

对于ASP.NET中托管的Web服务,配置属性为executionTimeout:

<configuration> <system.web>

<httpRuntime executionTimeout="360" />

</system.web>

</configuration>

设置此项并且线程中止异常将消失:)

答案 4 :(得分:9)

Response.RedirectServer.Transfer方法中出现此问题,因为两种方法都在内部调用Response.End

此问题的解决方案如下。

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

访问this link下载示例。

答案 5 :(得分:6)

尝试多次结束响应可能会导致此错误。正如已经提到的其他答案一样,有各种方法可以结束响应(例如Response.EndResponse.Redirect)。如果您连续多次调用,则会出现此错误。

我在使用Response.End之后尝试使用Response.TransmitFile时遇到此错误,似乎也结束了回复。

答案 6 :(得分:1)

我在成功登录用户后执行Response.Redirect时遇到此错误。

我通过改为FormsAuthentication.RedirectFromLoginPage来修复它。