威胁已经被清除了

Sye*_*Ali 31 asp.net multithreading server.transfer

我正在使用Server.Transfer.一切正常,但异常日志显示以下异常.

System.Threading.ThreadAbortException: Thread was being aborted.
   at System.Threading.Thread.AbortInternal()
   at System.Threading.Thread.Abort(Object stateInfo)
   at System.Web.HttpResponse.End()
   at System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm)
   at System.Web.HttpServerUtility.Transfer(String path)
Run Code Online (Sandbox Code Playgroud)

任何想法避免上述异常.

Jus*_*tin 40

调用此异常是Server.Transfer为了暂停当前方法的执行 - 如果你这样做,就会抛出同样的东西Response.Redirect.

你有两个选择:

  • 捕获并重新抛出ThreadAbortException /重新执行 Server.Transfer
  • 确保你只Server.Transfer在不会被抓住的地方做(推荐)

编辑:从头开始,http ://support.microsoft.com/kb/312629还有其他一些尝试,但我仍然推荐上面的#2.


小智 9

解决此问题的另一种方法是捕获生成的错误,而不是重新抛出它:

        catch (ThreadAbortException)
        { 
        }
Run Code Online (Sandbox Code Playgroud)

  • @Rob,通常,但并非总是如此. (4认同)

Mat*_*ock 8

Caling Server.Transfer将调用Response.End,它始终抛出ThreadAbortException.这是一个"特殊"异常,因为虽然它可以在catch块中捕获,但它总是会在catch块的末尾重新抛出.我会让你的错误记录忽略ThreadAbortExceptions.

  • 如果要将异常记录到可持久的日志记录系统,我会过滤掉ThreadAbortExceptions或让您的查询此记录系统的报告将其过滤掉. (4认同)

Jay*_*hia 8

Response.Redirect和Server.Transfer方法中会出现此问题,因为两个方法都在内部调用Response.End.

该问题的解决方案如下.

对于Server.Transfer,请改用Server.Execute方法.

访问此链接以获取下载示例示例.http://jayeshsorathia.blogspot.com/2012/03/thread-was-being-aborted-error-occured.html