【发布时间】:2014-06-30 18:32:19
【问题描述】:
我对使用 Quartz 非常陌生,我有一个关于触发器的问题。是否可以根据文件存在触发?我想让 Quartz 运行一个作业,直到找到某个文件,然后停止运行该作业并可能继续执行另一个作业。
例如,我想做这样的事情:
(1) Job1 每 60 秒检查一次给定目录中是否存在 File.txt。
(2) 如果找到 File.txt,则触发 Job2 启动。 Job1 停止检查文件是否存在。
现在,我有:
// Job definitions
var Job1 = JobBuilder.Create<TestEmail>().WithIdentity("job1", "group1").Build();
var Job2 = JobBuilder.Create<TestFileTrigger>().WithIdentity("job2", "group2").Build();
// Triggers
ITrigger trigger1 = TriggerBuilder.Create()
.WithIdentity("trigger1", "group1").StartNow()
.WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever())
.Build();
ITrigger trigger2 = TriggerBuilder.Create()
.WithIdentity("trigger2", "group2").StartNow()
.Build();
// Schedule jobs
scheduler.ScheduleJob(Job1, trigger1);
if (TestFileTrigger.fileExistence == true)
{
scheduler.ScheduleJob(Job2, trigger2);
}
但似乎 Job2 永远不会启动。
TestEmail 和 TestFileTrigger 目前只是打印到控制台。布尔值 TestFileTrigger.fileExistence 来自检查文件是否存在于给定位置(它确实存在)。
编辑: TestFileTrigger.fileExistence 是一个布尔值。如果有帮助,添加 Job1/Job2 的定义。
编辑:
我发现如果我把Thread.Sleep(TimeSpan.FromSeconds(x));放在if语句之前,如果条件满足,if语句就会运行。 (其中 x 是一些秒数。)为什么它在这种情况下有效,但在其他情况下无效?我不能总是知道需要多少秒才能满足条件。
【问题讨论】:
-
getnextfiretime说什么? quartz-scheduler.org/api/2.0.0/org/quartz/… -
我发现如果我把 Thread.Sleep(TimeSpan.FromSeconds(x));在第一行之后,它将继续执行 if 循环(其中 x 是秒数)。 getnextfiretime 为触发器返回正确的下一次触发时间。
标签: c# quartz-scheduler quartz.net