[英]Quartz.net Run 1 instance of a job with different JobKey and JobData
我有一個希望是一個簡單的問題,我無法找到答案。
如果我根據需要安排一個類型為LongRunningAndHeavyJob
的作業(StartNow())
我不知道這個作業將運行多長時間,但它可能很長(從10分鍾到60多分鍾)並且非常(StartNow())
CPU。 因為最終用戶可以按需啟動此作業,所以我希望確保此作業的一個實例在特定時間運行。
例如:
我如何確保Jane的工作不會與約翰的工作同時運行,並且將在約翰的工作完成后運行。
DisallowConcurrentExecution
屬性僅供您使用,如果您有一個帶有觸發器的計划作業,我認為該作業需要具有我沒有的相同鍵。
一些額外的信息:約翰的約伯有不同的工作數據而不是簡的工作
提前致謝
我解決了我面臨的問題!
我是怎么做到的:
[DisallowConcurrentExecution]
屬性修飾了長時間運行的作業 Durable
作業而沒有任何觸發器。 JobData
,並通過僅將觸發器提供給ScheduleJob
方法來調度作業(觸發器使用ForJob(IJobDetail)
方法) 這將確保在給定時間只有一個Job作業實例運行,如果其他人觸發了同一個作業,它將被安排在第一個作業完成后運行並且線程池中有線程可用
服務器部分:
private void RegisterManualJobs() {
var createTournamentScheduleJob = JobBuilder.Create<CreateTournamentScheduleJob>().WithIdentity("CreateTournamentSchedule", JobGroups.JG_TournamentScheduleJobs).StoreDurably().Build();
var createTournamentScheduleSingleEventJob = JobBuilder.Create<CreateTournamentScheduleSingleEventJob>().WithIdentity("CreateTournamentScheduleSingleEvent", JobGroups.JG_TournamentScheduleJobs).StoreDurably().Build();
Scheduler.AddJob(createTournamentScheduleJob,true);
Scheduler.AddJob(createTournamentScheduleSingleEventJob,true);
}
客戶部分:
var job = Scheduler.GetJobByName("CreateTournamentSchedule", JobGroups.JG_TournamentScheduleJobs);
var trigger = TriggerBuilder.Create().StartNow().WithIdentity($"Trigger-CreateTournamentSchedule-{TournamentID}", JobGroups.JG_TournamentScheduleJobs).UsingJobData(data).ForJob(job).Build();
Scheduler.ScheduleJob(trigger);
GetJobByName()
是我在IScheduler
編寫的擴展方法之一
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.