当前位置:  开发笔记 > 后端 > 正文

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

如何解决《当调用ASP.NETSystem.Web.HttpResponse.End()时,当前线程被中止?》经验,为你挑选了2个好方法。

当一个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

这是正常的行为,是否可以优雅地中止而不是(看起来像)突然中止?

更新

到目前为止,普通人口普查是设计的.所以我想知道是否有可能我们可以接受这个问题,看看我们是否可以调整代码,让我们感觉不像我们过早地结束线程并优雅地退出......可能吗?代码示例?



1> tvanfosson..:

没有"优雅"中止这样的事情.你可以简单地Flush()响应,而不是结束它,让框架负责为你关闭连接.在这种情况下,我假设您希望将响应发送到客户端,即典型情况.

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



2> Vilx-..:

是的,这确实是设计上的.微软甚至记录了它.你怎么能阻止你的程序的其余部分执行?

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有