例如,我想做这样的事情:
(1)Job1每隔60秒检查一次给定目录中是否存在file.txt.
(2)如果找到file.txt,则触发Job2启动. Job1停止检查文件是否存在.
现在,我有:
// Job deFinitionsvar Job1 = JobBuilder.Create<Testemail>().WithIDentity("job1","group1").Build();var Job2 = JobBuilder.Create<TestfileTrigger>().WithIDentity("job2","group2").Build();// TriggersITrigger trigger1 = TriggerBuilder.Create() .WithIDentity("trigger1","group1").StartNow() .WithSimpleSchedule(x => x.WithIntervalinSeconds(5).RepeatForever()) .Build();ITrigger trigger2 = TriggerBuilder.Create() .WithIDentity("trigger2","group2").StartNow() .Build();// Schedule jobsscheduler.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是一些秒数.)为什么它在这种情况下有效,但不是这样?我不能总是知道要满足条件需要多少秒.
问题如下.
您的主要线程执行以下 *** 作.
>创建两个作业
>给每个工作一个触发器
>安排Job1开始
>检查TestfileTrigger.fileExistence,如果为true,则启动Job2(它为false,因此不运行).
然后线程池线程将启动Job1.最有可能设置TestfileTrigger.fileExistence = true.但是主线程已经完成了它的工作.
鳍.
在任何时候你都不回去检查TestfileTrigger.fileExistence是否为真.所以它的结果无关紧要.事实上,在得到结果之前,您正在检查结果.
通过添加一个Thread.Sleep,你可以给job1足够的时间来完成并给你一个结果(job1以异步和并发的方式运行,很明显你希望它能同步运行).想象一下,例如你告诉你的朋友弗雷德去商店购买比萨饼并把它放在你的桌子上(异步),然后马上转过身来,想知道为什么你的桌子上没有披萨.
同步将是你自己去商店,买了一个披萨,把它带回家把它放在你的桌子上,然后从你的桌子上吃披萨.
JobScheduler.ScheduleJob(job1,trigger1);确实是异步工作的.
您应该创建一个作业来包装第4步并安排定期运行,或者使用内置的fileScanJob代替.
总结以上是内存溢出为你收集整理的c# – 基于文件存在的Quartz触发器?全部内容,希望文章能够帮你解决c# – 基于文件存在的Quartz触发器?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)