2017-01-27 45 views
0

我有一個網頁應用程序,其中有一個頁面,我每30分鐘就會調用一次來激活一個工作程序。一週約5-7次,我得到一個Thread was being aborted例外異常:線程在不處理Response.End問題時被中止

的ASPX頗像是:

<%@ Page Language="C#" AutoEventWireup="true" %> 
<html> 
<head runat="server"> 
    <script runat="server"> 
    public void Page_Load(object sender, EventArgs e) 
    { 
     System.Threading.Tasks.Task.Factory   
      .StartNew(() => { new MyApplicationWorker().RunApplicationWorker(); }); 
    } 
    </script> 
</head> 
<body></body> 
</html> 

在Web.config,我這一行,以防止超時和我所知道的工人完成比那更少的時間。

<httpRuntime enableVersionHeader="false" executionTimeout="300" /> 

正如您所看到的,頁面加載並調用在後臺運行的worker。沒有Response.End問題或Server.Transfer這是處理此問題的大多數其他帖子所圍繞的內容。我能做些什麼來防止發生異常?

謝謝。

+2

什麼是IIS池回收設置?也許整個應用程序正在回收? –

+1

也許這可能是相關http://stackoverflow.com/questions/7558145/unexpected-thread-abort-exception-using-tasks-爲什麼?其中一個答案是引號MSDN:後臺線程在應用程序終止之前不會等待,也許IIS只是回收終止線程的進程。 –

+0

@PawełŁukasik:該應用程序託管(現在)在共享主機環境。 – frenchie

回答

1

所以這是我一直在尋找解決一年以上的錯誤,所有其他相關的問題似乎處理Response.End()問題,但在這裏並非如此。

我一直認爲在發生錯誤的方法中出現了錯誤,但實際上這是工作人員被調用的錯誤開始的地方。

解決方案很簡單:我添加了.Wait(),並且從那以後錯誤消失了。

感謝alex.b對於導致這種other question的評論,我希望這可以幫助被中止別人誰就會碰到工作線程的同樣的問題。