当System.Web.HttpResponse.End()被称为System.Thread.Abort被触发时,我猜这是一个异常(或触发)吗?我有一些日志,这是在日志文件中列出的.
第一次机会
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
这是一种正常的行为吗?是否可以优雅地中止而不是突然突然中止呢?
更新
到目前为止,这是普通的人口普查,它是精心设计。所以,我想知道我们是否可以回答这个问题,看看我们是否可以修改代码,使之不让人觉得我们过早地、优雅地结束了线程.有可能吗?代码示例?
发布于 2008-12-13 14:41:12
是的,这确实是故意的。微软甚至已经推出了记录在案。否则,你会如何阻止你的程序的其余部分的执行?
发布于 2008-12-13 14:36:08
没有所谓的“优雅”流产。但是,您可以简单地刷新()响应,而不是结束它,让框架负责为您关闭连接。在这种情况下,我假设您希望将响应发送到客户端,即典型的情况。
根据MSDN,当响应过早结束时,调用Response.End()会抛出ThreadAbortException。只有在需要引发异常时才应该调用Response.End()。
发布于 2008-12-13 18:37:30
在堆栈中递归以停止当前执行的异常本质上没有什么不光彩的地方。当然,这不过是抛出一个异常,并在异常中的某个较低的位置捕捉它。
我会从你的日志中过滤它。如果使用ASP.Net运行状况监视,可以将每个异常配置/映射到给定的提供程序(事件日志、邮件等),以控制是否收到线程异常通知。如果是自定义日志记录,那么我只需要添加一个If来检查它。
请注意,您不能吃ThreadAbortException,所以即使您的日志代码正在执行类似于catch(Exception e) { // log exception and then do not throw again }
的操作,ThreadAbortException仍然会在您的catch块退出后由框架再次引发。
https://stackoverflow.com/questions/365249
复制相似问题