Thread estava sendo abortado
-
07-07-2019 - |
Pergunta
estou usando Server.Transfer. Tudo funciona bem, mas o log de exceção mostra a seguinte exceção.
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)
Qualquer idéia para evitar a exceção acima.
Solução
Esta exceção é lançada pela chamada para Server.Transfer
Para interromper a execução do método atual - exatamente a mesma coisa é jogada se você faz Response.Redirect
.
As duas opções que você tem são:
- Pegue e retire a ThreadAborTexception / reperforme o
Server.Transfer
- Certifique -se de fazer apenas
Server.Transfer
em lugares onde não será capturado (recomendado)
EDITAR: Risca isso, http://support.microsoft.com/kb/312629 Tem algumas outras sugestões para tentar, mas ainda recomendo o número 2 acima.
Outras dicas
Outra maneira de resolver isso é pegar o erro gerado e não retê -lo:
catch (ThreadAbortException)
{
}
Caling Server.Transfer chamará a resposta.END, que sempre lança uma ThreadABorTException. Esta é uma exceção "especial", porque, embora possa ser capturada em um bloco de captura, ele sempre será jogado no final do bloco de captura. Eu faria seu registro de erros ignorar o ThreadABorTexceptions.
Esse problema ocorre na resposta.
A solução para esse problema é a seguinte.
Para server.transfer, use o método server.execute.
Visite este link para download de exemplo de exemplo. http://jayeshsorathia.blogspot.com/2012/03/thread-was-being-aborted-error-occures.html
A substituição da resposta.END () pelo seguinte ajudou a corrigir o problema.
Resposta.flush (); Resposta.close ();
Referir Podemos usar o resposta.flush () em vez de resposta.end ()
Substituir Response.End()
Com HttpContext.Current.ApplicationInstance.CompleteRequest();