Der Work-Manager

Der Work-Manager ist Teil der BA Core Infrastruktur. Er verwaltet alle geplanten, laufenden oder beendeten Hintergrundprozesse. Dabei achtet er auf Priorisierung und maximalen Ressourcenverbrauch.

Ablauf des Work-Managers

Start

  • Beim Start der Anwendung werden alle Work-Items aus der Datenbank ausgelesen, die nicht abgeschlossen sind.
    1. Bei angeblich laufenden, also abgebrochenen Elementen wird der Status nun auf Aborted gesetzt und der Work-Manager führt asynchron die WorkItemFinished Methode aus.
    2. Bei wartenden Work-Items wird geprüft, ob sie bereit zur Ausführung sind, und der Status ggf. auf Queued geändert.
    3. Items, die sofort bereit sind, bleiben unverändert.
  • Danach werden die verfügbaren Prozesse nach Priorität der Items an die Items im Status “bereit” verteilt.
  • Zuletzt wird ein Timer auf den Startzeitpunkt des nächsten, noch nicht zur Ausführung bereiten Items gesetzt, falls eines existiert.

Abarbeitung

Der Work-Manager ist komplett ereignisgetrieben. Er tut nur Etwas wenn

  • sich ein Item beendet. Dann prüft er, ob ein anderes den freiwerdenden Prozess nutzen kann oder ein davon abhängiges Item nun gestartet werden darf.
  • ein Item nue eingeplant oder aktualisiert wird. Dann prüft er, ob es sofort bereit zu Ausführung ist und ob dafür ein Prozess frei ist.
  • ein Item abgebrochen werden soll. Dann signalisiert er dem Item, den Wunsch abzubrechen, und setzt seinen Status auf CancellingByUser.
  • der Timer für die nächste Startzeit angesprochen hat. Dann setzt er den Status aller Items, deren Startzeitpunkt verstrichen ist auf Queued und prüft, ob dafür sofort ein Prozess frei ist. Anschließend wird der Timer auf das nächste Item neu programmiert.

Ende

Wenn die Anwendung beendet oder neu gestartet wird, versucht der Workmanager alle noch laufenden Prozesse zu beenden. Das geschieht in mehreren Schritten:

  1. Zuerst wird das Starten neuer Prozesse unterbunden. (Es können aber noch neue Prozesse geplant werden.)
  2. Dann bekommen alle noch laufenden Prozesse ein asynchrones Signal zum Abbrechen (WorkItemShouldFinish) und den Status ShutdownRequest.
  3. Wenn alle Prozesse darauf reagiert haben, wird dem IIS signalisiert, dass die Anwendung jetzt beendet werden kann.
  4. Wenn sich ein Prozess nicht binnen 1 Minute nach dem Signal aus Punkt 2 beendet, wird die Anwendung trotzdem beendet. Der Prozess wird dabei hart abgebrochen.

Hinweis: Bei einem Anwendungsneustart kann die neue Anwendungsinstanz erst starten, wenn die vorherige beendet wurde. Aufgrund des o.g. Szenarios kann dieser Vorgang um bis zu 1 Minute verzögert werden. Die neue Anwendung bleibt dann im Status “Waiting for old application instance to terminate.” hängen.