Une expression branch
démarre un bloc d'une ou plusieurs sous-expressions asynchrones, et toute expression suivante est exécutée immédiatement, sans attendre que les expressions branch
soient terminées.
branch
permet essentiellement de traiter n'importe quel bloc de code asynchrone comme fire-and-forget immédiat, bien qu'il doive toujours être appelé dans un contexte asynchrone.
branch:
# Ce bloc continue jusqu'à ce qu'il soit terminé.
AsyncFunction1() # Démarre effectivement en même temps que AsyncFunction3()
Method1() # Le bloc peut être mélangé avec des expressions immédiates
AsyncFunction2()
AsyncFunction3() # Démarre effectivement en même temps que AsyncFunction1()
# Si la tâche de bloc de `branch` est toujours en cours lorsque AsyncFunction3 se termine,
# toute tâche de `branch` restante est annulée
Consultez le code suivant pour connaître la syntaxe de l'expression branch
.
expression0
branch:
slow-expression
mid-expression
fast-expression
expression1
Le diagramme ci-dessous montre le flux d'exécution des expressions.

Bien que semblable à l'expressionspawn
de la concurrence non structurée, branch
permet n'importe quel bloc de code arbitraire et n'est autorisée qu'au sein d'un contexte asynchrone englobant qui la délimite. C'est la raison pour laquelle vous devez préférer branch
à spawn
, dans la mesure du possible.
Utilisation de l'expression Branch
Où utiliser une expression branch |
Contextes asynchrones |
Temps d'invocation de l'expression branch |
Immédiat |
Exigences pour le bloc de code branch |
L'expression branch doit avoir au moins une expression asynchrone. |
Ce que fait l'expression branch |
Le corps de l'expressionbranch est lancé dès qu'il est détecté. L'évaluation du corps de l'expression branch se poursuit jusqu'à ce que le bloc de code ou le contexte asynchrone englobant (en fonction de ce qui arrive en premier) soit terminé, moment à partir duquel la tâche du bloc branch est annulée. |
Lorsque l'expression branch se termine |
L'expression branch se termine immédiatement. |
Lorsque la prochaine expression après branch démarre |
Toute expression suivant l'expression branch démarre immédiatement. |
Résultat de l'expression branch |
Étant donné qu'une expression branch n'a aucun résultat, son type de résultat est void . |
Actuellement, il est impossible d'utiliser une expression branch
dans le corps d'une expression d'itération telle que loop
ou for
. Si vous devez l'utiliser, intégrez-la dans une fonction asynchrone et faites en sorte que l'expression de l'itération appelle cette fonction.