【问题标题】:How to run one instance of a job at one time in QuartZ?如何在 QuartZ 中一次运行一个作业实例?
【发布时间】:2018-09-29 17:09:19
【问题描述】:

我想在我的 C#.Net 项目中实现 Quartz.Net。我每 10 分钟同步 1 个 FTP 并下载所有文件。一旦我下载了每个文件,我将处理它们。如果文件较多,则需要 10 分钟以上的时间。

如何运行一个作业的 1 个实例,如果触发器触发任何另一个作业实例,它不应该运行和处置它?

我的代码:

Quartz 调度器类

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;
    }
}

【问题讨论】:

  • 我建议,你将 bool 值设置为 true,当你开始工作时,当有新工作进来时,你检查旧工作是否还在运行。
  • @PoulBak 同意 100%,保持简单
  • 嗨@PoulBak,没有这样的步骤我可以使用这个。 Quartz 有一种机制来启动类本身并使用内存管理。我怎么能想到这样做呢??

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


【解决方案1】:

找了半天,早早找到了答案,但是这里发不出来。

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

参考:Job State and Concurrency

但是,您也可以查看此链接以了解 Git-Issue:(可能很有用)@DisallowConcurrentExecution misinterpretation on clustered Scheduler

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-12
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    • 2019-11-24
    • 2015-12-03
    相关资源
    最近更新 更多