4

私は MVC 5 インターネット アプリケーションをコーディングしておりHangFire、定期的なタスクに使用しています。

毎月の繰り返しタスクがある場合、次の実行時間の値を取得するにはどうすればよいですか?

繰り返しタスクのコードは次のとおりです。

RecurringJob.AddOrUpdate("AccountMonthlyActionExtendPaymentSubscription", () => accountService.AccountMonthlyActionExtendPaymentSubscription(), Cron.Monthly);

ジョブ データは次のように取得できます。

using (var connection = JobStorage.Current.GetConnection())
{
    var recurringJob = connection.GetJobData("AccountMonthlyActionExtendPaymentSubscription");
}

ただし、次に何をすべきかはわかりません。

繰り返しタスクの次回実行時間を取得することはできますか?

前もって感謝します。

4

1 に答える 1

16

あなたは近くにいます。これらの詳細を取得するためのより良い方法またはより直接的な方法があるかどうかはわかりませんが、Hangfire ダッシュボードが行う方法は、次のようにusing Hangfire.Storage;呼ばれる拡張メソッド (インポートに追加)を使用することGetRecurringJobs()です。

using (var connection = JobStorage.Current.GetConnection())
{
   var recurring = connection.GetRecurringJobs().FirstOrDefault(p => p.Id == "AccountMonthlyActionExtendPaymentSubscription");

   if (recurring == null)
   {
       // recurring job not found
       Console.WriteLine("Job has not been created yet.");
   }
   else if (!recurring.NextExecution.HasValue)
   {
       // server has not had a chance yet to schedule the job's next execution time, I think.
       Console.WriteLine("Job has not been scheduled yet. Check again later.");
   }
   else
   {
       Console.WriteLine("Job is scheduled to execute at {0}.", recurring.NextExecution);
   }
}

2 つのキャッチがあります。

  1. すべての定期的なジョブが返され、結果から適切なレコードを選択する必要があります
  2. ジョブを最初に作成したとき、NextExecution時間はまだ利用できません (null になります)。サーバーは、接続すると、スケジュールする必要がある定期的なタスクを定期的にチェックし、そうすると思います。RecurringJob.AddOrUpdate(...)または他の同様の方法を使用して作成された直後にスケジュールされているようには見えません。NextExecution作成直後にその値を取得する必要がある場合、何ができるかわかりません。ただし、最終的には人口が集中します。
于 2015-02-11T07:08:31.747 に答える