2014-10-21 25 views
0

我有一些代碼調用Response.Redirect,它引發了ThreadAbortException。我可以看到它發生在調試器中,但未調用Application_Error方法。如果我在斷開異常後,代碼將繼續運行,如果我F5從Response.redirect拋出的ThreadAbortException不被Application_Error捕獲

如果我故意在Response.Redirect之前拋出異常,它將通過Application_Error方法。

所以我不明白爲什麼ThreadAbortException沒有以相同的方式處理。這對我們的生產網站也是一個困境。我可以看到ThreadAbortExceptions發生在開發環境中,我預計它們在生產中發生,但沒有線索。生產運行良好,也許出於同樣的原因,我沒有看到ThreadAbortExceptions處理,如我所料。

如果任何人都可以幫助解決可能發生的事情,我將不勝感激。

回答

0

ThreadAbortException基本上是放棄線程的內部信號。這是一個特殊的例外 - 它不能被捕獲(它會一直被自動重新拋出),並且它會而不是使您的應用程序失敗。

就你而言,這是由於你使用了Response.Redirect引起的 - 無論何時你使用結束請求的變體,它都會這樣做。這基本上是將請求短路並在不執行請求的其餘部分的情況下發送重定向。通常有更好的方法來做重定向,但這並沒有真正的傷害。

+0

謝謝,這肯定會解釋很多。我確實有不同的代碼來執行Response.Redirects,但在繼續進行更改之前,我必須瞭解上述行爲。 – user3473870 2014-10-22 14:49:59

相關問題