ASP.Net Core 1.1のWebアプリケーションでcronタスクを実装しようとしています。ASP.Net CoreのHangfire:単純な定期ジョブが動的コンテンツをリフレッシュしない
Hangfireライブラリを選択することにしました。
私のインストールと構成が正常に動作しているかどうかを確認するために、私はコンソール出力に現在のDateTimeを印刷することを目的とした、非常に単純な繰り返し作業を書いた:
RecurringJob.AddOrUpdate(() => Console.WriteLine($"{DateTime.Now}"), Cron.Minutely);
奇妙なことは、すべてのことですがメッセージが印刷された最初の日時に対応すると同じメッセージを出力し、DateTime.Now
部分を更新しません。
私は/ Hangfireダッシュボードにアクセスし、ジョブの詳細を見れば、のような、静的日時出力として翻訳され表示されます。
Console.WriteLine("15/09/2017 15:27:21");
ので、ジョブがキューに入れたときに一種の「コンパイル」しているようですこれは明らかに私が意図したものではありません。
このジョブを、データベーステーブルの行数をカウントするジョブで置き換えようとしました。問題は同じです。ジョブの2回の間に行を追加または削除すると、表示される行数は更新されません。更新は、Webアプリケーションを再起動した場合にのみ発生します。
実際、あなたの答えはおそらく別の理由で同じ出力を提供しますが、私はその理由を理解し解決しました(回答を投稿します)。静的クラスの静的メソッドが私の問題でした。一度私のメソッドを各実行時にインスタンス化されたクラスに移動すると、すべてうまくいった。この特定のケースでは、あなたはその問題を特定したと思います。 – kall2sollies
@ kall2sollies [迅速なテスト](https://shifty.site/JiBYF)のとおりに動作することが確認できます。 私がやっているアプリケーションにはいくつかのレイヤーがありますが、すべてのハングファイアプロセスはパブリック静的クラスのパブリックメソッドを介して開始されます。重要なテイクアウェイは、Enqueue/AddOrUpdateメソッドでhangfireに提供される情報が、メソッドに送信されるもののスナップショットであることです。これらのメソッド内で何が起き、そのメソッド内で何が生成されるのかは、そのメソッドが実行されたときに決定されます。 –
私の最初の試みは落とし穴かもしれないと思います。私の静的クラスは、ASP.NetプロジェクトのStartupクラスのConfigureメソッドの拡張メソッドを保持するためのもので、ジョブの登録はこの拡張メソッドであり、呼び出されたメソッドは同じ静的クラスの別の静的メソッドでした。とにかく、最も重要なことは、適切に実装されたときに、それがすべて機能することです!努力をいただきありがとうございます! – kall2sollies