什么原因导致'线程被中止'异常随机发生,并向浏览器显示HTTP头和部分HTML
本文关键字:浏览器 显示 HTTP HTML 随机 线程 什么 异常 | 更新日期: 2023-09-27 17:54:20
发生的事情偶尔是随机的,而不是像您期望的那样返回到浏览器的HTML,它看起来有点像这样:
线程被终止。http/1.1 200 OK
(标题的其余部分)
…(如HTML的1/10)
就是这样,他们实际上是在浏览器窗口中获得一堆文本。
这不是一直发生的,只是随机的。电脑……根据我的经验,做任何事都要有理由。这到底是怎么回事?
我已经搜索了整个解决方案,并发现相当多的调用Response.Redirect(),这似乎是基于我读过的其他问题的罪魁祸首…
这一切都很好,但它并没有告诉我为什么它会随机发生
…或者为什么它会把这个奇怪的结果返回给浏览器,而不是我们设置的正常自定义错误页面。如果这确实是导致它的原因,我还没有确定。如果是,我不认为我可以简单地添加'false'参数,因为我不知道如果它继续执行当前代码会做什么。
当你调用Response时。End(由Response等其他方法调用)。重定向和Server.Transfer)执行线程被中止,抛出ThreadAbortException(中止线程在ASP.NET中并不例外)。您可以捕获此异常,但它总是会在catch
处理程序中被重新抛出。这将它与其他异常类型区分开来,但它是有意义的,因为你不应该能够阻止线程终止,并且在进程中通过执行finally块来清理堆栈。
也许你有一些异常处理逻辑,其中Response.End
在try
块内被调用,并且在catch
块中产生意外输出?
类似这样的内容(在"成熟"的代码库中可能更复杂,更难以跟踪):
void HandleRequest() {
try {
Response.Redirect(...);
}
catch (Exception ex) {
Response.Write(...);
}
}
如果Response.Redirect
以Response.End
结尾,则抛出ThreadAbortException
, Response.Write
将执行向响应添加文本。
我不知道是否可能是同样的问题,但我经常看到'线程被中止'异常发生时,发生在ASP中发生的事情。. NET(如应用程序池回收,重新编译应用程序等)。
你能检查事件日志看看是否同时发生了什么吗?