2015-11-04 99 views
1

我們使用BackgroundJobServerOptions.WorkerCount = 1運行hangfire單線程(因爲我們有一個有序處理請求)。Hangfire 1.3.4 - 刪除的作業卡在隊列中

大多數情況下,這是沒有問題的,但偶爾有一個工作因完全預期的原因被卡住(例如,它運行的實際代碼進入無限循環),但因爲我們運行的是單線程,從開始的隊列中。

爲了試圖解決這個問題,我們刪除的作業,但後來它停留在隊列中,從開始阻止任何其他的工作:

enter image description here

我已經找到了解決的唯一途徑這是放棄並重新創建顯然不是很好的hangfire數據庫。

爲什麼在hangfire中刪除正在運行的作業而不是將其從隊列中刪除?這是不是奇怪的刪除行爲是一個錯誤,要在更高版本中修復,或者這是設計中的行爲,因爲我們正在運行單線程?

如果這是由設計決定的,那麼如何取消處理作業以將其從隊列中移除?

回答

0

好吧,看起來這是行爲設計​​。

如果IIS應用程序池工作器被回收,Hangfire將立即開始處理下一個任務。但是,如果沒有重啓,Hangfire將無限期地「掛起」。

一個問題時,有人就這個github上,但它一直沒有解決尚未: https://github.com/HangfireIO/Hangfire/issues/80

由於沒有辦法取消或手動「失敗」的作業,這使得遲髮型在單少了很多有用的線程方案。

更新:在部分更新版本的Hangfire中已部分或完全解決了這個問題。