Die Standardimplementierung dieser Methoden leer. Sie können bei Bedarf überschrieben werden.
BeforeProcessing
protected virtual void BeforeProcessing(bool resume) { }
Diese Methode kann überschrieben werden, um Arbeiten vor der eigentlichen Hauptaufgabe zu erledigen. Diese Methode wird exakt einmal bei ersten Start des Workers mit false
aufgerufen. Falls der Worker, warum auch immer, neu gestartet wird, erfolgt der Aufruf mit true
.
Typischerweise wird man hier bei !resume MaxProgress
füllen wollen, sofern die nicht schon bei der Erzeugung des Work-Items (ohne Datenbankabfrage) gefüllt werden konnte.
AfterProcessing
protected virtual void AfterProcessing(Exception exception) { }
Diese Methode wird nach der eigentlichen Arbeit exakt einmal aufgerufen. Das gilt sowohl für den Fall, dass die Arbeit erfolgreich beendet wurde, als auch für den Fall, dass es zu einem Fehler (unbehandelte Ausnahme) kam. Den Unterschied erkennt man am State
und ggf. am Inhalt von ExeptionDuringRun
.
Hier sollten keine wesentlichen Aufgaben mehr erledigt werden, da nur ein geringes Zeitkontingent von einer Minute zur Verfügung steht.
BeforeSuspend
protected virtual void BeforeSuspend() { }
Wenn die Arbeit unterbrochen wird, z.B. weil eine Zeitüberschreitung erfolgt ist, dann wird die Methode BeforeSuspend
aufgerufen.
Auch hier sollten keine wesentlichen Aufgaben erledigt werden, da nur ein geringes Zeitkontingent von einer Minute zur Verfügung steht.
OnUserCancelled
protected virtual void OnUserCancelled() { }
Wenn ein Work-Item abgebrochen wird, wird der aktuelle Datensatz noch fertig bearbeitet und dann diese Methode aufgerufen. Der Aufruf erfolgt auch dann, wenn der Abbruch vor dem Start erfolgt und BeforeProcessing
noch nie aufgerufen wurde. Den Unterschied erkennt man am State
, der in letzterem Fall Removed
ist, sonst ist er Cancelled
.
Auch hier sollten keine wesentlichen Aufgaben erledigt werden, da nur ein geringes Zeitkontingent von einer Minute zur Verfügung steht. Falls größere Aufräumarbeiten erforderlich sind, sollten diese in einem eigenen Aufräum-Worker als Nachfolger gestartet werden.
AfterProcessingOrm
Diese Methode wird nach jedem Aufruf von ProcessSingleOrm
aufgerufen, und zwar unabhängig davon, ob eine Exception aufgetreten ist. Über den Rückgabewert von AfterProcessingOrm
kann man steuern, ob die Schleife über die einzelnen Orms ganz normal fortgesetzt werden soll (Continue
), oder ob sie beendet werden soll. Beenden erfolgt über Finish
oder Retry
, die sich darin unterscheidet, dass im Falle einer Wiedereinplanung, um die sich die überladene Klasse selbst kümmern muss, das aktuelle ORM erneut aufruft, oder beim nächsten fortsetzt.