2016-06-02 18 views
5

Hangfireでは、Web UIとその「トリガ」ボタンのおかげで、定期的なジョブを正常に設定し、手動でトリガできるようになりました。HangFireで「オンデマンド」のジョブを設定する

RecurringJob.AddOrUpdate(..); 

enter image description here

しかし、私は自動的に発射されることはありません仕事を設定するつもりです。 WebUiからのオンデマンドでのみ。それを、必要な場合にのみ起動される一連の保守タスクと考えてください。手動で

私は待っていない状態でジョブを追加することを考えていましたが、できませんでした(間違っていると思います)。

Hangfireで「オンデマンドオンリー」ジョブが可能ですか?

+3

私は何をすべきかは、ジョブをトリガするためのコントローラを持っています。ジョブをエンキューするアクションを呼び出すボタンを含む管理ページを作成します。 – aethercowboy

+1

@Rob「2月31日」の解決策は残念ながら機能しません。 Hangfireは、式にマッチする次の実際のカレンダーの日付を見つけようとしている間に例外をスローします(そのような日付を探している間、過去9999で終了します)。 (Hangfire v1.6.4以降) –

+1

@JonSchneiderこれは残念です!私はそれをテストしたとは思っていません、それはcronタブ記法を使用しているので、それは短期間の価値があると信じていました。私は将来人を迷わせないようにコメントを削除します – Rob

答えて

1

はい、オンデマンドジョブはハングファイアでは完全に可能です。次を使用して、ファイア・アンド・フォーゲットジョブをトリガすることができます。

BackgroundJob.Enqueue(
() => Console.WriteLine("Simple!")); 

しかしこれはhangfireのダッシュボードには表示されませんが、あなたのコードで上記のスニペットを使用することができます(おそらく、ボタンの後にクリックしてください?)

4

このCRON式をNeverとして使用します。0 0 29 2/12000 WED 2月29日の深夜、毎週水曜日の水曜日です。

2

マニュアルまたは「オンデマンド」はメイントランクに実装されていません。しかし、あなたはuse this forkにそのオプションを持たせることができます。

は現在、これはHangfire's repoで進行中の作業としてマークされ、あなたはこのようにそれを使用することができます。

BackgroundJob.Stash(() => Console.WriteLine("STASHING")); 

コメントの一つに言及した別のアプローチは、あなたのサイトのどこかにエンキューするボタンを持つことです仕事:

BackgroundJob.Enqueue(() => Console.WriteLine("Simple!")); 

EDIT:2017年12月28日:

どうやらこの拡張は、すでにに手動でキュージョブサポートしていますので、文句を言わないバックマージする前のフォーク:

Hangfire.Core.Dashboard.Management

enter image description here

関連する問題