Task-Funktionen
Die Task-Funktionen sind für das Abarbeiten und Auswerten von Aufgaben zuständig, die durch TASK-Objekte repräsentiert werden. Da die Aufgabe eines TASK-Objekts in einem eigenen Hintergrundprozess des Erstellers abgearbeitet wird, belastet die hierzu benötigte Abarbeitungszeit in keinerweise die Ausführungsdauer des Zyklusprogramms. Dies setzt allerdings voraus, dass der Abarbeitungsstand eines TASK-Objekts zyklisch ausgewertet wird, um dann auch das Ergebnis der Aufgabe abrufen zu können. In den Beispielen der Task-Funktionsbeschreibungen wird die switch-case Methode verwendet, da sich mit dieser das Fortschreiten einer asynchronen Abarbeitung am Einfachsten abbilden lässt.
Wird beim Aufruf einer asynchronen CPL-Funktion (Suffix: Async)
ein TASK-Objekt zurückgeliefert, so wird diese asynchrone Aufgabe in die
interne Warteschlange (FIFO-Speicher) des Erstellers eingetragen (bei
RestFullRequestAsync
ist der Ersteller das REST-Objekt rest).
Läuft dort bereits eine Aufgabe, so verbleibt die neue Aufgabe in der
Warteschlange und wartet dort bis die aktuell laufende Aufgabe abgeschlossen
ist. Nach Abschluss der laufenden Aufgabe wird in der Warteschlange geprüft,
ob ein wartendes TASK-Objekt vorhanden ist. Ist ein wartendes TASK-Objekt
vorhanden, so wird es aus der Warteschlange entfernt und deren Aufgabe
abgearbeitet. Mit der Funktion TaskStatus
kann der aktuelle Zustand eines TASK-Objekts im Klartext ausgelesen werden.
Eine Aufgabe, also ein TASK-Objekt, kann jederzeit mit TaskCancel abgebrochen werden, sodass
sie entweder aus der Warteschlange entfernt wird oder deren laufende Abarbeitung
abgebrochen wird. Um den Abschluss der Aufgabe eines TASK-Objekts festzustellen,
sollte TaskFinished
zyklisch aufrufen werden. Da TaskFinished
nur zurückgibt ob die Aufgabe beendet wurde, sagt sie nichts darüber
aus was zum Beenden der Aufgabe führte - dies muss anschließend geklärt
werden. Lieferte TaskFinished
true zurück, kann nun mit TaskSuccessful
geprüft werden, ob die Aufgabe erfolgreich durchgeführt wurde und das
Ergebnis der Aufgabe mit einer der Funktionen TaskGetResultArray, TaskGetResultBool,
TaskGetResultInt
und TaskGetResultString
abgeholt werden kann. Sollte TaskSuccessful
false liefern, kann mit den Funktionen TaskAborted, TaskCanceled und TaskGetLastError der Grund
für den Fehlschlag der Ausführung ermittelt werden. Nach Abschluss und
Auswertung der Abarbeitung kann das TASK-Objekt mit TaskClose geschlossen und zerstört
werden.
TaskFinished, TaskAborted, TaskCanceled, TaskCompleted, TaskStatus
TaskSuccessful, TaskGetResultArray, TaskGetResultBool, TaskGetResultInt, TaskGetResultString