为什么我在asp.net中收到"Thread is aborted"?

56 asp.net exception

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

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

它似乎发生在呼吁System.Threading.WaitHandle.WaitOne.我不确定这个例外有多远.我不认为我的线程会终止,因为我捕获日志并吞下错误.

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

Ica*_*rus 50

不,ThreadAbortException是一个简单的抛出Response.Redirect


ric*_*ott 41

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

旧答案:

已知问题:PRB:如果使用Response.End,Response.Redirect或Server.Transfer,则会发生ThreadAbortException

Response.Redirect ("bla.aspx", false);
Run Code Online (Sandbox Code Playgroud)

要么

try
{
    Response.Redirect("bla.aspx");
}
catch (ThreadAbortException ex)
{
}
Run Code Online (Sandbox Code Playgroud)


Chr*_*ain 40

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

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

当发生这种情况时,从中启动的任何线程AppDomain(包括来自的线程)Application_Start都将被中止.

在这个问题上有更多关于应用程序池和回收的信息:Appdomain回收到底是什么

如果你试图在其中运行一个长时间运行的过程IIS/ASP.NET,简短的回答通常是"不要".这就是Windows服务的用途.

  • 事实并非如此.从这里:http://msdn.microsoft.com/en-us/library/ms178473.aspx"Application_Start和Application_End方法是不代表HttpApplication事件的特殊方法.ASP.NET在应用程序的生命周期内调用它们一次域,而不是每个HttpApplication实例." (2认同)

Abh*_*arg 16

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

<configuration> <system.web>

<httpRuntime executionTimeout="360" />

</system.web>

</configuration>
Run Code Online (Sandbox Code Playgroud)

设置此,线程中止异常将消失:)

  • "设置这个并且线程中止异常将消失"......几分钟;) (6认同)

Jay*_*hia 9

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

该问题的解决方案如下.

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

访问此链接以获取下载示例示例.


jah*_*ahu 7

尝试多次结束响应可能导致此错误。正如已经提到的其他答案一样,有多种方法可以结束响应(如Response.EndResponse.Redirect)。如果您连续拨打多个电话,则会收到此错误消息。

我在使用Response.End后尝试使用Response.TransmitFile它时也遇到了这个错误,它似乎也结束了响应。