quartz任務執行完之後再執行下一輪任務 避免頻率過快併發情況
阿新 • • 發佈:2020-10-26
原文:https://www.cnblogs.com/eagle-xie/p/8657395.html
預設情況下,當Job執行時間超過間隔時間時,排程框架為了能讓任務按照我們預定的時間間隔執行,會馬上啟用新的執行緒執行任務。
若我們希望當前任務執行完之後再執行下一輪任務,也就是不要併發執行任務,該如何解決呢?
第一種方法:設定quartz.threadPool.threadCount 最大執行緒數為 1。這樣到了第二次執行任務時,若當前還沒執行完,排程器想新開一個執行緒執行任務,但我們卻設定了最大執行緒數為 1 個(即:沒有足夠的執行緒提供給排程器),則排程器會等待當前任務執行完之後,再立即排程執行下一次任務。(注意:此方法僅適用於Quartz中僅有一個Job,如果有多個Job,會影響其他Job的執行)
第二種方法:在 Job 類的頭部加上[DisallowConcurrentExecution],表示禁用併發執行。(推薦使用此方法)
//不允許此 Job 併發執行任務(禁止新開執行緒執行) [DisallowConcurrentExecution] public class Job1 : IJob { }