如何在QuartZ中一次运行一个作业实例?

时间:2018-09-29 17:09:20

标签: c# .net quartz.net-3.0

我想在我的C#.Net项目中实现Quartz.Net。我正在同步1个FTP,并每10分钟下载所有文件。下载完每个文件后,我将对其进行处理。如果有更多文件,则将花费10分钟以上的时间。

如何运行一个作业实例,并且如果触发器触发了另一个作业实例,则它不应运行并处置它?

我的代码:

Quartz Scheduler类

public class ResponseFileSyncJobScheduler
{
    public static async Task StartResponsefileSyncker()
    {
        ISchedulerFactory sf = new StdSchedulerFactory();
        IScheduler sched = await sf.GetScheduler();

        //DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);

        IJobDetail job = JobBuilder.Create<ResponseFileJob>()
            .WithIdentity("ResponsefileSync", "sgroup")
            .Build();

        ITrigger trigger = TriggerBuilder.Create().WithIdentity("TriggerfileSync", "sgroup")
            .WithDailyTimeIntervalSchedule
            (s => s.WithIntervalInMinutes(10).OnEveryDay())
            .StartAt(DateTime.Now.AddMinutes(1))
            .Build();

        await sched.ScheduleJob(job, trigger);
        await sched.Start();
        await Task.Delay(TimeSpan.FromSeconds(65));
    }
}

石英作业类别

public class QuartzJobSOGET : IJob
{
    internal static readonly Task CompletedTask = Task.FromResult(true);

    public virtual Task Execute(IJobExecutionContext context)
    {
        JobKey jobKey = context.JobDetail.Key;

        //Write Date Time to File - to ensure Quartz Scheduler Working   
        WritetoFile(DateTime.Now.ToString());

        //Sync every present file and process 
        //once processed delete file from server and make log, 
        //will take 1 min to process single file (almost)
        SyncResponseFilefromSOGETftp();

        return CompletedTask;
    }
}

1 个答案:

答案 0 :(得分:0)

很长一段时间后,我较早找到了答案,但无法在此处发布。

我们可以在类上使用DisallowConcurrentExecution属性来停止单个作业的多次执行。

参考:Job State and Concurrency

不过,您也可以查看以下有关Git问题的链接:(可能有用)@DisallowConcurrentExecution misinterpretation on clustered Scheduler