我在我的.NET应用程序中使用Quartz。起初,我在Windows服务中使用它但它没有工作,所以我把它移动到一个正常的项目来测试它。这是Main中的代码:
ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler sched = schedFact.GetScheduler();
JobDetail jobDetail = new JobDetail("JobPrueba", null, typeof(JobPrueba));
Trigger trigger = TriggerUtils.MakeMinutelyTrigger(1, 3);
trigger.StartTimeUtc = DateTime.Now;
trigger.Name = "TriggerPrueba";
sched.Start();
sched.ScheduleJob(jobDetail, trigger);
这是JobPrueba:
class JobPrueba : IStatefulJob
{
public JobPrueba() { }
public void Execute(JobExecutionContext context)
{
const string fic = @"C:\prueba.txt";
string texto = DateTime.Now.ToString();
System.IO.StreamWriter sw = new System.IO.StreamWriter(fic, true);
sw.WriteLine(texto);
sw.Close();
System.Console.WriteLine("Hello world");
}
}
它根本没有做任何事情,当执行Main中的最后一行时,程序永远不会结束,但它不会写入文件,也不会在控制台中打印Hello World。
有谁知道我做错了什么?
答案 0 :(得分:3)
我发现这是一个时代的问题。我住的是一个时间为UTC + 2的国家,所以当我将触发器的StartTimeUtc设置为DateTime.Now而不是UtcNow时,触发器不必在两小时后触发,我认为它必须触发在代码执行的那一刻。
此外,我设置了一个计时器,以记录发生的事情,并在该日志中我打印当前时间(使用DateTime.Now)和触发器的StartTimeUtc,显然它们是相同的,后来DateTime.Now是大于StartTimeUtc。如果我打印了DateTime.UtcNow我已经看到了问题。