Кварц .NET не запускает триггер, почему? - PullRequest
0 голосов
/ 31 марта 2010

Я использую Quartz в своем приложении .NET. Сначала я использовал его в службе 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 Ответ

3 голосов
/ 31 марта 2010

Я обнаружил, что это проблема времен. Я живу в стране с временем UTC + 2, поэтому, когда я установил StartTimeUtc триггера на DateTime.Now, вместо UtcNow триггер не должен был срабатывать до двух часов спустя, и я подумал, что он должен сработать в тот момент, когда код был выполнен.

Кроме того, я установил таймер, чтобы регистрировать происходящее, и в этом журнале я напечатал текущее время (с DateTime.Now) и StartTimeUtc триггера, и, очевидно, они были такими же, и позже DateTime.Now был больше чем StartTimeUtc. Если бы я напечатал DateTime.UtcNow, я видел проблему.

...