防止一次运行多个计划任务/一次只运行一个(在其他运行时暂停)

时间:2016-12-31 14:18:33

标签: c# asp.net scheduled-tasks quartz.net

我有两个使用Quartz.NET库创建的计划任务,如下所示:

 public static void StartCompetitorResearchUpdate()
    {
        IJobDetail competitorResearch = JobBuilder.Create<CompetitorResearchJob>().WithIdentity("Job1").Build();
        ITrigger trigger = TriggerBuilder.Create().WithIdentity("Trigger1").StartNow().WithCronSchedule("0 0 0/2 * * ?").ForJob("Job1").Build();
        ISchedulerFactory sf = new StdSchedulerFactory();
        IScheduler sc = sf.GetScheduler();
        sc.ScheduleJob(competitorResearch, trigger);
        sc.Start();
    }
    public static void StartStoreAnalyticsUpdate()
    {
        IJobDetail competitorResearch = JobBuilder.Create<StoreAnalyticsUsersUpdate>().WithIdentity("Job2").Build();
        ITrigger trigger = TriggerBuilder.Create().WithIdentity("Trigger2").StartAt(DateTimeOffset.UtcNow).WithCronSchedule("0 0 0/4 * * ?").ForJob("Job2").Build();
        ISchedulerFactory sf = new StdSchedulerFactory();
        IScheduler sc = sf.GetScheduler();
        sc.ScheduleJob(competitorResearch, trigger);
        sc.Start();
    }

这里的诀窍是,我希望第一个计划任务StartCompetitorResearchUpdate()&lt; =暂停xx分钟(最好是20-30分钟 - 或者第二个工作正在运行),因为第一份工作有时可以每天24小时运行并且需要通过HTTP请求提取大量数据,这就是为什么我需要在第二个运行时暂停第一个数据的原因。

有没有办法实现这个目标?

P.S。第一份工作每2小时运行一次,第2份工作每4小时运行一次......

1 个答案:

答案 0 :(得分:0)

您可以使用ITriggerListener并实施方法VetoJobExecution。 可以找到更多信息here