2013-03-02 71 views
6

我正在致力於升級我們在內部使用Quartz.net的作業調度系統。看看Quartz最新版本的來源,我注意到它仍然使用自己的線程池實現,而不是.NET 4.0開始提供的大大改進的線程池(或任何來自System.Threading.Tasks的線程池)。Quartz.net +任務並行庫

我很想知道是否有人成功實現了一個使用Quartz.net作爲調度功能和TPL進行線程池的作業調度系統。將Quartz的線程池換成TPL相對容易嗎?石英甚至在任務世界中仍然相關?另外,就像我在.NET 4.x線程池(核心知識,本地隊列,改進的鎖定等)方面的巨大改進一樣,Quartz的線程池足夠用於典型的粗粒度後臺作業,並且不值得迫使TPL加入混合的努力?

在此先感謝有關使用(或不使用)這兩種工具的任何見解。

回答

3

Quartz.NET有解決與TPL有點不同的問題。 Quartz.NET旨在用於具有豐富功能的循環作業調度,用於執行時間。另一方面,TPL意味着高性能並行執行計算工作量。

因此,本質上你(通常)使用Quartz.NET進行精確調度,並且使用TPL來完成需要儘可能快地利用所有計算資源(核心等)完成的併發工作負載。在說了這些之後,我會說Quartz.NET使用的線程池實現對於工作來說已經足夠了。另外請記住,Quartz.NET符合.NET 3.5,不能使用4.0版本的特性。

當然,您也可以在解決方案中將這兩者合併。

+0

謝謝。我認爲你確認了我的預感,也許你不需要一個超級渦輪增壓線程池來運行緩慢的無人值守的後臺作業。 – 2013-03-05 01:25:29

+0

將兩者結合使用會有什麼潛在的缺陷嗎?舉個例子,我想安排一個工作,當它被觸發時,從數據庫中獲得它的工作,並且這項工作可能是50-100個單獨的工作,我想在Parallel.ForEach中完成。有沒有這種情況會炸燬? – avesse 2017-02-26 08:57:16

+1

他們應該一起工作就好。只要有正常的日誌記錄和異常處理例程。認爲它就像Program.cs的Main會拋出一樣,這是一回事。你可能要考慮在出錯時將重試標誌設置爲上下文,或者等待下一次執行 - 最好讓這個工作是冪等的。 – 2017-02-27 09:57:37