我想在我的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;
}
}
答案 0 :(得分:0)
很长一段时间后,我较早找到了答案,但无法在此处发布。
我们可以在类上使用DisallowConcurrentExecution
属性来停止单个作业的多次执行。
不过,您也可以查看以下有关Git问题的链接:(可能有用)@DisallowConcurrentExecution misinterpretation on clustered Scheduler