为什么我在asp.net中得到“线程被中止”?
我不知道为什么发生这种情况,我从来没有明确地放弃线程,所以有点意外。 但是,我loggingexception,我看到:
System.Threading.ThreadAbortException – 线程被中止。
它似乎发生在调用System.Threading.WaitHandle.WaitOne
。 我不知道这个例外有多远。 我不认为我的线程终止,因为我抓住日志并吞下错误。
有谁知道我为什么得到这些错误? 也许是当我强迫终止我的服务器或要求重启? 如果不是那么可能导致他们?
不, ThreadAbortException
由一个简单的Response.Redirect
抛出
如果您在Application_Start中产生线程,它们仍将在应用程序池的AppDomain中执行。 如果应用程序闲置一段时间(意味着没有请求进入),或者某些其他条件满足,ASP.NET将回收整个AppDomain。 当发生这种情况时,从该AppDomain开始的任何线程(包括Application_Start中的线程)将被中止。
在这个问题上有更多的应用程序池和回收: 什么是AppDomain回收
如果您想在IIS / ASP.NET中运行一个长时间运行的过程,简短的答案通常是“不要”。 这就是Windows服务的用途。
ASP.NET根据需要随时产生并终止工作进程。 您的线程可能只是由ASP.NETclosures。
老答案:
已知问题: PRB:如果使用Response.End,Response.Redirect或Server.Transfer,则会发生ThreadAbortException
Response.Redirect ("bla.aspx", false);
要么
try { Response.Redirect("bla.aspx"); } catch (ThreadAbortException ex) { }
对于ASP.NET中托pipe的Web服务,configuration属性是executionTimeout:
<configuration> <system.web> <httpRuntime executionTimeout="360" /> </system.web> </configuration>
设置这个和线程中止exception将消失:)
Response.Redirect
和Server.Transfer
方法中会发生此问题,因为这两个方法在内部调用Response.End
。
这个问题的解决方法如下。
对于Server.Transfer
,请改用Server.Execute
方法。
请访问此链接下载示例。
尝试多次结束响应可能导致此错误。 正如已经提到的其他答案有各种方法,将结束响应(如Response.End
,或Response.Redirect
)。 如果你连续打电话多一个,你会得到这个错误。
我在使用Response.End
之后尝试使用Response.End
时,遇到了这个错误,而且似乎也会结束响应。
我在用户成功login后执行Response.Redirect
时出现此错误。
我通过改变FormsAuthentication.RedirectFromLoginPage
来修复它。
- c ++exception类devise
- Newtonsoft.Json.DeserializeObject抛出什么exception?
- 如何让ruby打印一个完整的回溯,而不是一个截断的?
- 如何从“需求”中拯救:没有这样的文件加载在ruby?
- 在现代Python中声明自定义exception的正确方法是什么?
- Python中是否有Java IllegalStateExceptionexception?
- 我如何解决android.os.NetworkOnMainThreadException?
- 我应该在Python中对不良/非法参数组合提出哪个exception?
- 如果不立即重新生成exception追踪,则隐藏