我不确定为什么会发生这种情况并且我从未明确中止线程,所以这有点令人惊讶。但我记录了Exceptions,我看到了:
System.Threading.ThreadAbortException - 正在中止线程。
似乎是在致电System.Threading.WaitHandle.WaitOne
时发生的。我不确定这个例外有多远。我不认为我的线程会终止,因为我抓住了日志并吞下了错误。
为什么我会收到这些错误?也许是我强行终止我的服务器或要求它重启?如果不是那么可能导致他们的原因?
答案 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.Redirect
和Server.Transfer
方法中出现此问题,因为两种方法都在内部调用Response.End
。
此问题的解决方案如下。
对于Server.Transfer
,请改用Server.Execute
方法。
访问this link下载示例。
答案 5 :(得分:6)
尝试多次结束响应可能会导致此错误。正如已经提到的其他答案一样,有各种方法可以结束响应(例如Response.End
或Response.Redirect
)。如果您连续多次调用,则会出现此错误。
我在使用Response.End
之后尝试使用Response.TransmitFile
时遇到此错误,似乎也结束了回复。
答案 6 :(得分:1)
我在成功登录用户后执行Response.Redirect
时遇到此错误。
我通过改为FormsAuthentication.RedirectFromLoginPage
来修复它。