Für die asynchrone Verarbeitung stellt die TAA Infrastruktur 2 Methoden zur Verfügung: DoSpawn sowie WaitFor. Diese Methoden sind nur für Visual Basic freigegeben.
Es können nur Bausteine asynchron angestartet werden, die den Implementierungstyp EXE, DLLC32 oder DLLCOB32 haben. Für andere Implementierungstypen wird im Moment ein Fehlercode zurückgeliefert.
Methode der Klasse ModlEnv
System.Boolean doSpawn ( System.String sModl , System.String sEvnt , params string[] sArgs )
Diese Methode funktioniert analog der Methode doCall, mit dem Unterschied, dass nicht gewartet wird, bis der aufgerufene Baustein fertig ist. Sie kehrt direkt zurück, damit der Aufrufer weiterarbeiten kann. Mit DoSpawn gestartete Bausteine laufen unabhängig vom Aufrufer, auch wenn dieser sich mit Unregister beendet. Hierdurch entsteht für die Anwendung die größtmögliche Flexibilität bei Benutzung von DoSpawn. Die Infrastruktur überprüft bei Beenden des Prozesses, ob noch asynchrone gestartete Bausteine aktiv sind. Sollte dies der Fall sein, sorgt die Infrastruktur dafür, dass diese Bausteine zu Ende laufen können, bevor der Prozess wirklich beendet wird.
Es ist zu beachten, dass der asynchron gestartete Baustein nicht direkt auf den ihm übergebenen Parameterobjekten operiert, sondern auf Kopien, die von der Infrastruktur erstellt werden. Dies bedeutet, dass der Aufrufer eventuelle Änderungen nicht bemerkt. Um die geänderten Objektdaten zu übernehmen, muss der Aufrufer sich mit dem asynchron gestarteten Baustein synchronisieren und explizit angeben, ob die Objektdaten übernommen werden sollen. Gleiches gilt auch für in einem asynchron gestarteten Baustein aufgeworfene Conditions, und den rückgereichtem Zustand des Bausteins. Hierzu gibt es die Methoden WaitFor und WaitForAll. WaitFor/WaitForAll: Synchronisation mit asynchronen Bausteinen
Methode der Klasse: ModlEnv
TeamWiSE.TAA.WaitForRC WaitFor ( ) TeamWiSE.TAA.WaitForRC WaitFor ( TeamWiSE.TAA.WaitForFlags Flags ) TeamWiSE.TAA.WaitForRC WaitFor ( System.UInt32 nTimeout ) TeamWiSE.TAA.WaitForRC WaitFor ( System.UInt32 nTimeout , TeamWiSE.TAA.WaitForFlags Flags ) TeamWiSE.TAA.WaitForRC WaitFor ( System.String sModl , TeamWiSE.TAA.WaitForFlags Flags ) TeamWiSE.TAA.WaitForRC WaitFor ( System.String sModl , System.UInt32 nTimeout ) TeamWiSE.TAA.WaitForRC WaitFor ( System.String sModl , System.UInt32 nTimeout , TeamWiSE.TAA.WaitForFlags Flags ) TeamWiSE.TAA.WaitForRC WaitFor ( System.String sModl , System.String sEvnt ) TeamWiSE.TAA.WaitForRC WaitFor ( System.String sModl , System.String sEvnt , TeamWiSE.TAA.WaitForFlags Flags ) TeamWiSE.TAA.WaitForRC WaitFor ( System.String sModl , System.String sEvnt , System.UInt32 nTimeout ) TeamWiSE.TAA.WaitForRC WaitFor ( System.String sModl , System.String sEvnt , System.UInt32 nTimeout , TeamWiSE.TAA.WaitForFlags Flags )
Mit der Methode WaitFor kann der Baustein sich mit einem oder mehreren von ihm asynchron gestarteten Bausteinen synchronisieren. Über die Argumente geben Sie an, auf welche Bausteine gewartet werden soll, und was mit den evtl. geänderten Daten passieren soll.
Rückkehrwert ist ein Wert der Klasse TeamWiSE.TAA.WaitForRC.
Argumente
sModl | Name des Bausteins, auf den gewartet werden soll. Enthält dieses Argument einen Leerstring, werden alle asynchron gestarteten Bausteine berücksichtigt. |
sEvnt | Nur, wenn sModl den Namen eines asynchron gestarteten Bausteins enthält: Es werden nur die Bausteine mit dem entsprechenden Namen berücksichtigt, bei denen das hier angegebene Ereignis ausgelöst wurde. |
nTimeout | Angabe in Millisekunden, wie lange die Infrastruktur maximal warten soll, bis die angegebenen Bausteine fertig sind. Default ist 300 ms. |
dwFlags | steuert das Verhalten der Infrastruktur, s. TeamWiSE.TAA.WaitForFlags |
Angaben, auf welche Instanzen gewartet werden soll | |
---|---|
WaitFirstStarted | Auf den zuerst gestarteten Baustein warten. Default. |
WaitLastStarted | Auf den zuletzt gestarteten Baustein warten. |
WaitFirstReady | Auf den ersten Baustein warten, der fertig wird. |
WaitAllReady | Warten, bis alle Bausteine fertig sind. |
Angaben, was mit evtl. geänderten Daten passieren soll | |
DataAccept | Objektdaten und Zustand übernehmen. Default. Achtung: Wenn auf mehrere Bausteine gewartet wird, ist die Reihenfolge, in der die Daten übernommen werden, nicht vorhersehbar oder reproduzierbar! |
DataIgnore | Änderungen in Objekten und Zustand ignorieren. |
Angaben, was mit evtl. aufgeworfenen Conditions passieren soll | |
CndReport | Gibt an, dass aufgeworfene Conditions vom Aufrufer behandelt werden sollen (Default). Es werden nur die aufgeworfenen Conditions von den Bausteinen, auf die gewartet wird, berücksichtigt. Die Visual Basic- Implementierung von WaitFor(All) sorgt dafür, dass die aufgeworfene Condition mit der VB-Methode Err.Raise weiter aufgeworfen wird. Wenn auf mehrere Bausteine gleichzeitig gewartet wird, ist nicht vorhersehbar oder reproduzierbar, in welcher Reihenfolge die aufgeworfenen Conditions behandelt werden. |
CndIgnore | Aufgeworfene Conditions werden ignoriert. |
Error | Die Infrastruktur konnte den Waitfor bzw. WaitForall nicht ausführen. |
OK | Die asynchron ausgeführten Bausteine, die den angegebenen Kriterien entsprechen, sind fertig und die Daten sind, wenn die Option taaDataAccept angegeben ist, übernommen worden. |
Timeout | Die Infrastruktur hat die Kontrolle an den Baustein zurückgegeben, da die mit dwTimeout angegebene Wartezeit abgelaufen ist. |
Cnd | Von einem der asynchron gestarteten Bausteine ist eine Condition aufgeworfen worden, die jetzt behandelt werden soll. Dieser Rückkehrwert kommt nur vor, wenn die Option taaCndReport angegeben ist. Wird dieser Rückkehrwert zurückgegeben, sollte WaitFor(All) noch einmal mit denselben Argumenten aufgerufen werden, um evtl. weitere Conditions zu behandlen. Dies sollte solange geschehen, bis WaitFor(All) taaWaitForOK oder taaWaitForNotFound zurückliefert. |
NotFound | Es gibt keine asynchron gestarteten Baustine, die die angegebenen Kriterien erfüllen. |