当一个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
这是正常的行为,是否可以优雅地中止而不是(看起来像)突然中止?
到目前为止,普通人口普查是设计的.所以我想知道是否有可能我们可以接受这个问题,看看我们是否可以调整代码,让我们感觉不像我们过早地结束线程并优雅地退出......可能吗?代码示例?
没有"优雅"中止这样的事情.你可以简单地Flush()响应,而不是结束它,让框架负责为你关闭连接.在这种情况下,我假设您希望将响应发送到客户端,即典型情况.
根据MSDN,当响应过早结束时,调用Response.End()会抛出ThreadAbortException.你真的应该只在需要引发异常时调用Response.End().
是的,这确实是设计上的.微软甚至记录了它.你怎么能阻止你的程序的其余部分执行?