2014-02-08 96 views
0

我知道後臺線程上的未處理異常會導致網站關閉,因此防止網站關閉,我將下面的代碼添加到Global.asax中以防止它。防止ASP.NET(MVC)網站關閉異常

protected void Application_Error(object sender, EventArgs e) 
{ 
    System.Web.HttpContext context = HttpContext.Current; 
    System.Exception ex = Context.Server.GetLastError(); 

    context.Server.ClearError(); 

    Elmah.ErrorSignal.FromCurrentContext().Raise(ex); 
} 

但即使這樣的代碼不會阻止網站關閉。我在這裏錯過了什麼?

+0

頁面異常不會導致整個網站停機。在這種情況下,「後臺線程」是什麼意思? –

+0

手動創建線程,如新線程(()=> new ArgumentException())。開始() – Freshblood

+1

ASP.NET沒有辦法阻止未處​​理的後臺異常終止進程。你最好的辦法是在線程入口點處理異常(如果可能的話)。這些/什麼樣的線程正在拋出什麼樣的異常?如果您稍微描述一下您的情況,我們可能會提供指導。或者,您可能希望使用Task.Run而不是手動產生線程。 – Levi

回答

1

如果您確實需要手動產生託管線程,我認爲AppDomain.UnhandledException事件是您的非致命異常的唯一選擇,因爲Application_Error未針對在請求處理上下文外拋出的異常進行調用。

根據您在後臺線程中所做的操作,您可能想要切換到I/O綁定操作的async/await模型或CPU綁定任務的TPL in general