Quartz .NET没有触发,为什么?

时间:2010-03-31 07:54:15

标签: triggers quartz-scheduler

我在我的.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。

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:3)

我发现这是一个时代的问题。我住的是一个时间为UTC + 2的国家,所以当我将触发器的StartTimeUtc设置为DateTime.Now而不是UtcNow时,触发器不必在两小时后触发,我认为它必须触发在代码执行的那一刻。

此外,我设置了一个计时器,以记录发生的事情,并在该日志中我打印当前时间(使用DateTime.Now)和触发器的StartTimeUtc,显然它们是相同的,后来DateTime.Now是大于StartTimeUtc。如果我打印了DateTime.UtcNow我已经看到了问题。