首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当调用ASP.NET System.Web.HttpResponse.End()时,是否中止当前线程?

当调用ASP.NET System.Web.HttpResponse.End()时,是否中止当前线程?
EN

Stack Overflow用户
提问于 2008-12-13 14:15:48
回答 4查看 34.6K关注 0票数 19

当System.Web.HttpResponse.End()被称为System.Thread.Abort被触发时,我猜这是一个异常(或触发)吗?我有一些日志,这是在日志文件中列出的.

第一次机会

代码语言:javascript
运行
复制
exception of type 'System.Threading.ThreadAbortException' occurred in mscorlib.dll
12/14/2008 01:09:31::
Error in Path :/authenticate
Raw Url :/authenticate
Message :Thread was being aborted.
Source :mscorlib
Stack Trace :   at System.Threading.Thread.AbortInternal()
   at System.Threading.Thread.Abort(Object stateInfo)
   at System.Web.HttpResponse.End()
   at DotNetOpenId.Response.Send()
   at DotNetOpenId.RelyingParty.AuthenticationRequest.RedirectToProvider()
   at MyProject.Services.Authentication.OpenIdAuthenticationService.GetOpenIdPersonaDetails(Uri serviceUri) in C:\Users\Pure Krome\Documents\Visual Studio 2008\Projects\MyProject\Projects\Services\Authentication\OpenIdAuthenticationService.cs:line 108
   at MyProject.Mvc.Controllers.AuthenticationController.Authenticate() in C:\Users\Pure Krome\Documents\Visual Studio 2008\Projects\MyProject\Projects\MVC Application\Controllers\AuthenticationController.cs:line 69
TargetSite :Void AbortInternal()
A first chance exception of type 'System.Threading.ThreadAbortException' occurred in Ackbar.Mvc.DLL
An exception of type 'System.Threading.ThreadAbortException' occurred in Ackbar.Mvc.DLL but was not handled in user code

这是一种正常的行为吗?是否可以优雅地中止而不是突然突然中止呢?

更新

到目前为止,这是普通的人口普查,它是精心设计。所以,我想知道我们是否可以回答这个问题,看看我们是否可以修改代码,使之不让人觉得我们过早地、优雅地结束了线程.有可能吗?代码示例?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-12-13 14:41:12

是的,这确实是故意的。微软甚至已经推出了记录在案。否则,你会如何阻止你的程序的其余部分的执行?

票数 6
EN

Stack Overflow用户

发布于 2008-12-13 14:36:08

没有所谓的“优雅”流产。但是,您可以简单地刷新()响应,而不是结束它,让框架负责为您关闭连接。在这种情况下,我假设您希望将响应发送到客户端,即典型的情况。

根据MSDN,当响应过早结束时,调用Response.End()会抛出ThreadAbortException。只有在需要引发异常时才应该调用Response.End()。

票数 11
EN

Stack Overflow用户

发布于 2008-12-13 18:37:30

在堆栈中递归以停止当前执行的异常本质上没有什么不光彩的地方。当然,这不过是抛出一个异常,并在异常中的某个较低的位置捕捉它。

我会从你的日志中过滤它。如果使用ASP.Net运行状况监视,可以将每个异常配置/映射到给定的提供程序(事件日志、邮件等),以控制是否收到线程异常通知。如果是自定义日志记录,那么我只需要添加一个If来检查它。

请注意,您不能吃ThreadAbortException,所以即使您的日志代码正在执行类似于catch(Exception e) { // log exception and then do not throw again }的操作,ThreadAbortException仍然会在您的catch块退出后由框架再次引发。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/365249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档