Ein branch Ausdruck beginnt einen Block von einem oder mehreren asynchronen Unterausdrücken, und jeder Ausdruck, der danach folgt, wird sofort ausgeführt, ohne dass auf die Vervollständigung der branch Ausdrücke gewartet wird.
Mit branch kannst du jeden asynchronen Codeblock so behandeln, als wäre er sofort Fire-and-Forget, aber er muss trotzdem innerhalb eines asynchronen Kontextes aufgerufen werden.
branch:
# Dieser Block wird fortgesetzt, bis er abgeschlossen ist
AsyncFunction1() # Startet praktisch zur gleichen Zeit wie AsyncFunction3()
Method1() # Block kann mit unmittelbaren Ausdrücken gemischt werden
AsyncFunction2()
AsyncFunction3() # Startet praktisch zur gleichen Zeit wie AsyncFunction1()
# Wenn die Verzweigungsblockaufgabe noch läuft, wenn AsyncFunction3 abgeschlossen ist
# dann wird jede verbleibende Verzweigungsaufgabe abgebrochen
Der folgende Code zeigt die Syntax für den Ausdruck branch.
expression0
branch:
slow-expression
mid-expression
fast-expression
expression1
Das Diagramm unten zeigt den Ausführungs-Ablauf der Ausdrücke.
Er ist ähnlich wie der unstrukturiert gleichzeitige spawn-Ausdruck, aber branch erlaubt jeden beliebigen Codeblock und ist nur innerhalb eines umschließenden asynchronen Kontexts zulässig und durch diesen begrenzt. Aus diesem Grund wird branch, wann immer es möglich ist, dem spawn vorgezogen.
Verzweigungsausdruck verwenden
Wo du einen branch Ausdruck verwenden kannst |
Asynchrone Kontexte |
Aufrufzeitpunkt des branch Ausdrucks |
Unmittelbar |
Voraussetzungen für den Codeblock branch |
Der Ausdruck branch muss mindestens einen asynchronen Ausdruck enthalten. |
Was der branch Ausdruck macht |
Der Körper des branch Ausdrucks wird gestartet, sobald man auf ihn trifft. Der Körper des Verzweigungsausdrucks wird so lange ausgewertet, bis der Codeblock oder der umgebende asynchrone Kontext abgeschlossen ist - je nachdem, was zuerst eintritt -, woraufhin die Aufgabe des branch Codeblocks abgebrochen wird. |
Wenn der Ausdruck branch abgeschlossen ist |
Der Ausdruck branch ist sofort abgeschlossen. |
Wenn der nächste Ausdruck nach branch beginnt |
Jeder Ausdruck, der auf den Ausdruck branch folgt, wird sofort gestartet. |
Ergebnis des branch Ausdrucks |
Ein branch Ausdruck hat kein Ergebnis, also ist sein Ergebnistyp void. |
Ein branch Ausdruck kann derzeit nicht im Körper eines Iterationsausdrucks wie loop oder for verwendet werden. Wenn er verwendet werden muss, verpacke ihn in eine asynchrone Funktion und lass den Iterationsausdruck diese Funktion aufrufen.