【发布时间】: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