我目前在.net c#4.0中工作,並且遇到了一些我寫的代碼,這導致了一些令我頭痛的問題。System.Threading.ThreadAbortException在新線程中觸發
我正在使用System.Threading.Tasks.TaskFactory類與System.Threading.Tasks.TaskScheduler一起在我的控制檯應用程序中啓動一個新線程,其中線程的功能是檢查是否添加了一個項目排隊。當一個項目被添加到隊列中時,它會對其進行處理。
因此,隊列包含要發送的電子郵件,並且一旦將電子郵件添加到隊列中,電子郵件就會通過多個客戶端發送。發送到每個都是並行完成的。
我有其中以下異常在新的線程中發生一些時間此間歇性問題:
[System.Threading.ThreadAbortException] = {無法評估表達式,因爲代碼被優化或天然幀是在調用堆棧頂部}
調試時,我無法獲得任何進一步的信息,因爲堆棧中的所有屬性都有「無法評估表達式,因爲代碼已經優化或本地框架在調用之上棧「。
在互聯網尋找解決方案,我發現這是一個問題,發生在做response.redirect時,但我沒有在我的代碼中這樣做。如果我嘗試進行調試,則發生此錯誤的位置不存在一致性。以下是代碼,我用它來創建工廠,並開始新的線程:
this.taskFactory = new TaskFactory(TaskScheduler.Current);
this.taskFactory.StartNew(this.DequeueMessage, state, TaskCreationOptions.LongRunning);
任何人任何指針,爲什麼我會收到此錯誤,併爲任何提示它如何能解決嗎?
您是否正在Web應用程序中創建任務?如果是這樣,你可能看到AppDomain被回收。解決方案是將後臺線程移動到Windows服務中。 – 2012-07-17 18:00:48
我在Visual Studio中運行的簡單集成測試中看到了這種行爲。當我在控制檯應用程序中運行相同的代碼時也會看到相同的行爲。 – amateur 2012-07-17 18:11:35