In "System.Web" ASP.NET kann Hintergrundarbeit über RegisterObject
/ QueueBackgroundWorkItem
registriert werden, um an der Shutdown-Sequenz von IIS teilzunehmen (komplett mit 90 Sekunden Gnadenfrist), aber ich bin kämpfen, um die genaue Entsprechung in ASP.NET 5 zu finden.
Betrachten Sie die Quelle für Microsoft.AspNet.Hosting.HostingEngine
, Kann ich sehen, dass es über IApplicationLifecycle.ApplicationStopping
und IApplicationLifecycle.ApplicationStopped
signalisiert (zwischen denen es den Server und PipelineInstance
disponiert), aber es scheint keinen Platz für die 90 Sekunden Gnadenfrist zu geben, die RegisterObject
benötigt in der alten API.
Die IIS-Integrationsschicht wurde noch nicht geöffnet (falls überhaupt), daher ist es schwierig zu sehen, wie diese Implementierung Dinge abbildet.
Fehle ich eine API? Sollte ich eine blockierende Abschaltung über CancellationToken.Register()
durchführen? Ist das etwas, das von "v1 of vNext" weggelassen wurde?
Jede Erleuchtung würde sehr geschätzt werden.
Ich habe das Folgende mit Hilfe der auf Katana basierenden Hangfire-Implementierung als Inspiration erstellt. Es hat keine Tests außer der Überprüfung, dass der Shutdown-Code ausgeführt wurde, wenn IIS Express beendet wurde, aber es funktioniert als Proof of Concept.
Der Entwurf hier ist offensichtlich nicht für "Feuer und vergessen" Aufgaben, da sie direkt vor dem Herunterfahren ausgelöst werden könnten. Es funktioniert jedoch für so etwas wie einen idempotenten Queue-Prozessor (vorausgesetzt, Timeouts im Leerlauf wurden deaktiviert)
%Vor%Was kann dann so verwendet werden:
%Vor%Tags und Links asp.net-core