2016-06-02 8 views
5

In Hangfire habe ich erfolgreich wiederkehrende Jobs eingerichtet und kann manuell auslösen, wenn ich möchte, dank der Web-Benutzeroberfläche und der Schaltfläche "Trigger".In HangFire einen Job "nur auf Anforderung" einstellen

RecurringJob.AddOrUpdate(..); 

enter image description here

Aber ich bin bereit, einen Job zu setzen, die nie automatisch ausgelöst wird. Nur auf Anfrage von der WebUi. Stellen Sie es sich als Wartungsaufgabe vor, die nur bei Bedarf ausgelöst wird. Manuell.

Ich dachte daran, einen nicht-recurcing Job im Wartezustand hinzuzufügen, war aber nicht in der Lage (und es klingt falsch).

Sind "On demand only" Jobs mit Hangfire möglich?

+3

Was ich tue, ist eine Steuerung haben Jobs für die Auslösung. Erstellen Sie eine Admin-Seite mit einer Schaltfläche, die eine Aktion aufruft, die den Job in die Warteschlange stellt. – aethercowboy

+1

@Rob Die "Feb 31" Lösung funktioniert leider nicht. Hangfire löst anscheinend eine Ausnahme aus, während es versucht, das nächste tatsächliche Kalenderdatum zu finden, das mit dem Ausdruck übereinstimmt (und endet nach 9999, wenn er nach einem solchen Datum sucht). (Ab Hangfire v1.6.4) –

+1

@JonSchneider Das ist bedauerlich! Ich glaube nicht, dass ich es getestet habe, ich bin nur der Meinung, dass es vielleicht einen kurzen Versuch wert ist, da es die Cron-Tab-Notation verwendet. Ich werde den Kommentar entfernen, um die Leute nicht in die Irre zu führen – Rob

Antwort

1

Ja, auf Anfrage sind Jobs mit Hangfire durchaus möglich. Sie können fire-and-forget auslösen Jobs mit dem folgenden: (? Vielleicht nach einer Schaltfläche klicken)

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

Dies wird jedoch nicht in der hangfire Armaturenbrett erscheinen, aber Sie können das obige Snippet in Ihrem Code verwenden

4

Ich benutze diesen CRON-Ausdruck als nie: 0 0 29 2/12000 WED Um Mitternacht, am 29. Februar, das ist ein Mittwoch, jedes Jahrhundert.

2

Manuelle oder "on demand" sind noch nicht im Hauptstamm implementiert. Sie können jedoch use this fork diese Option haben.

Derzeit ist dies in Hangfire's repo als Work in Progress markiert und Sie es als diese verwenden:

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

Ein anderer Ansatz in einer der Kommentare erwähnt ist irgendwo in Ihrer Website eine Schaltfläche zu haben, die die Warteschlange einreiht Job:

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

EDIT: 2017.12.28:

Anscheinend ist die vorherige Gabel gewohnt, da diese Erweiterung verschmolzen zurück werden unterstützt bereits manuell Aufträge in Warteschlange:

Hangfire.Core.Dashboard.Management

enter image description here

Verwandte Themen