Hangfire Hintergrundjob mit Rückgabewert

8

Ich wechsle von Task.Run zu Hangfire . In .NET 4.5+ Task.Run kann Task<TResult> zurückgeben, was mir ermöglicht, Aufgaben auszuführen, die andere als void zurückgeben. Ich kann normalerweise warten und das Ergebnis meiner Aufgabe erhalten, indem ich auf die Eigenschaft MyReturnedTask.Result

zugreife

Beispiel für meinen alten Code:

%Vor%

Soweit ich von der Schnellstart Seite von Hangfire, Ihrem Hauptdarsteller, sehen kann was ist BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget")); führt den Code perfekt als Hintergrundjob aus, unterstützt aber anscheinend keine Jobs, die einen Rückgabewert haben (wie der oben dargestellte Code). Ist das richtig? wenn nicht, wie kann ich meinen Code optimieren, um Hangfire zu verwenden?

P.S. Ich habe mir bereits HostingEnvironment.QueueBackgroundWorkItem angesehen ( hier ), aber es fehlt offensichtlich die gleiche Funktionalität (Hintergrundjobs müssen void sein)

BEARBEITEN

Wie @Dejan herausgefunden hat, ist der Hauptgrund, warum ich zu Hangfire wechseln möchte, der gleiche Grund, warum die .NET-Leute QueueBackgroundWorkItem in .NET 4.5.2 hinzugefügt haben. Und dieser Grund wird in Scott Hanselmans großartigem Artikel über Hintergrundaufgaben in ASP.NET gut beschrieben. Also werde ich aus dem Artikel zitieren:

  

QBWI (QueueBackgroundWorkItem) plant eine Aufgabe, die unabhängig von   jede Anfrage. Dies unterscheidet sich von einem normalen ThreadPool-Arbeitselement darin   ASP.NET protokolliert automatisch, wie viele Arbeitselemente registriert wurden   über diese API laufen derzeit, und die ASP.NET-Laufzeit wird   Versuchen Sie, AppDomain herunterzufahren, bis diese Arbeitselemente beendet sind   Ausführen.

    
yazanpro 13.03.2015, 21:54
quelle

1 Antwort

7

Eine einfache Lösung wäre, die Überwachungs-API abzufragen, bis der Job wie folgt beendet ist:

%Vor%

Achtung : Natürlich können Sie sich in einem Web-gehosteten Szenario nicht darauf verlassen, dass die Aufgabe ( task.ContinueWith() ) fortgesetzt wird, nachdem der Job beendet wurde, da die AppDomain möglicherweise heruntergefahren wird - Aus denselben Gründen möchten Sie wahrscheinlich Hangfire verwenden.

    
Dejan 18.03.2015 14:09
quelle

Tags und Links