0

プロジェクトで Quartz.NET を使用しています。次の問題があります。毎日 23 時にスケジュールされたタスクを実行したいのですが、次のコードを使用してそれを実行しています。

public class HelloJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        //Download file
    }
}
public interface ISchedule
{
    void Run();
}

public class HelloSchedule : ISchedule
{
    public void Run()
    {

        IJobDetail job = JobBuilder.Create<HelloJob>()
                                   .WithIdentity("job1")
                                   .Build();

        ITrigger trigger = TriggerBuilder.Create()
                                         .ForJob(job)
                                         .WithIdentity("trigger1")
                                         .StartNow()
                                         .WithCronSchedule("0 0 23 ? * MON-FRI *")
                                         .Build();

        ISchedulerFactory sf = new StdSchedulerFactory();
        IScheduler sc = sf.GetScheduler();
        sc.ScheduleJob(job, trigger);

        sc.Start();
    }
}

しかし、残念ながら発砲していません。問題が何であるかを知り、それを解決するにはどうすればよいですか?
アドバイスありがとうございます

4

2 に答える 2

1

ジョブは午後 11 時に起動します。
次のコードを使用して、ジョブの次回起動時間を確認できます。

private static DateTime getNextFireTimeForJob(IScheduler scheduler, string jobName, string groupName = "")
    {
        JobKey jobKey = null;

        if (!string.IsNullOrEmpty(groupName))
        {
            jobKey = new JobKey(jobName, groupName);
        }
        else
        {
            jobKey = new JobKey(jobName);
        }

        DateTime nextFireTime = DateTime.MinValue;

        bool isJobExisting = Scheduler.CheckExists(jobKey);
        if (isJobExisting)
        {
            var detail = scheduler.GetJobDetail(jobKey);
            var triggers = scheduler.GetTriggersOfJob(jobKey);

            var myTrigger = triggers.Where(f => f.Key.Name == "SecondTrigger").SingleOrDefault();


            if (triggers.Count > 0)
            {
                var nextFireTimeUtc = triggers[0].GetNextFireTimeUtc();
                nextFireTime = TimeZone.CurrentTimeZone.ToLocalTime(nextFireTimeUtc.Value.DateTime);
            }
        }

        return (nextFireTime);
    }

これを使用して情報を取得します。

var nextFireTime = getNextFireTimeForJob(sc, "job1");

HelloJob実装を確認してくださいIJob

Quartz.net スケジューラを WinApp に統合している場合は、シングルトンが作成されていることを確認してください。これは、スコープ外になると破棄される可能性があるためです。

コンソール アプリケーションでジョブをテストし、Console.ReadLine();ジョブの実行を待機します。

于 2013-06-26T11:18:25.610 に答える