2

Quartz.NET 2.0で簡単なスケジュールされたジョブを作成しようとしています

同様の問題について読んだことがありますが、うまくいきませんでした。

問題は、ジョブが StartAt トリガーの後に 1 回だけ実行されることです。

これが私のコードです:

public EntityMappingSvc()
{
    IJobDetail job = JobBuilder.Create<EntityMappingJob>().WithIdentity("QueueJob").Build();
    TriggerBuilder tb = TriggerBuilder.Create();
    tb.WithIdentity("StdTrigger");
    tb.WithSimpleSchedule(a => a.WithIntervalInMinutes(1));
    tb.StartAt(new DateTimeOffset(new DateTime(2012, 11, 20, 10, 55, 0)));
    tb.ForJob(job);
    ITrigger trigger = tb.Build();
    Global.sched.ScheduleJob(job, trigger);
}

protected void Application_Start(object sender, EventArgs e)
{
    Global.factory = new StdSchedulerFactory();
    Global.sched = Global.factory.GetScheduler();
    Global.sched.Start();

    GC.KeepAlive(factory);
    GC.KeepAlive(sched);
}

仕事は単純です...しかし、それをテストするには、実際の仕事に影響を与えないエラーを発生させなければなりませんでした。

初めてジョブを実行した後、ブロックされます

while (runnable == null && run)
{
     Monitor.Wait(this, 500);
}
if (runnable != null)
{
     ran = true;
     runnable.Run();
}

SimpleThreadPool の Run メソッドで。

助言がありますか?

PS: アプリケーションは WCF IIS ホステッド サービスです。

編集:

TriggerBuilder tb = TriggerBuilder.Create();
tb.WithIdentity("StdTrigger");
tb.WithCronSchedule("0 1 * * * ?");
tb.StartAt(new DateTimeOffset(new DateTime(2012, 11, 20, 10, 45, 0)));
tb.ForJob(job);
ICronTrigger trigger = tb.Build() as ICronTrigger;
Global.sched.ScheduleJob(job, trigger);

まだ動作していません。

同じ問題。

4

2 に答える 2

1

同様の問題がありました。表記を置き換える:

GC.KeepAlive(factory);
GC.KeepAlive(sched);

スケジューラへの単純な静的ポインタを使用:

private static scheduler _scheduler;
...
_scheduler.Start();
于 2012-11-20T09:16:08.830 に答える