L'expression race est utilisée pour exécuter simultanément un bloc de deux expressions asynchrones ou plus. Lorsque l'expression la plus rapide se termine, elle « gagne la course ». Les expressions « perdantes » restantes sont annulées, puis toute expression qui suit l'expression race est évaluée.
set WinnerResult = race:
# All three async functions start at the same time
AsyncFunctionLongTime()
AsyncFunctionShortTime() # This will win and its result is used
AsyncFunctionMediumTime()
# Next expression is called after the fastest async function completes
# / when the fastest/shortest async function task (AsyncFunctionShortTime()) completes
# and all other async function tasks (AsyncFunctionLongTime(), AsyncFunctionMediumTime()) are canceled.
NextExpression(WinnerResult)Le code suivant montre la syntaxe de l'expression race.
expression0
race:
slow-expression
mid-expression
fast-expression
expression1Le diagramme ci-dessous montre le flux d'exécution des expressions.
Utiliser l'expression race
Possibilité d'utilisation d'une expression | |
Temps d'invocation de l'expression | Asynchrone |
Exigences concernant le bloc de code de l'expression | Le corps de l'expression |
À quoi sert l'expression | Similaire à |
Lorsque l'expression | L'expression |
Lorsque la prochaine expression après | Toute expression suivant l'expression |
Résultat de l'expression | Le résultat d'une |
L'expression race peut paraître simple, mais elle est l'une des expressions les plus utiles et les plus puissantes de l'arsenal Verse. Il est essentiel d'arrêter tout autre code asynchrone arbitrairement complexe de manière structurée, comme s'il s'agissait d'une sortie anticipée. L'expression `race` effectue cette opération proprement, en séparant les tests dont l'arrêt doit être déterminé du code devant être discontinué.
Toute expression asynchrone peut être annulée.
Certaines expressions asynchrones, par exemple une expression
loopsans fin ouSleep(Inf), ne se terminent jamais. La seule façon de les arrêter est de les annuler. Cette stratégie est particulièrement efficace si elle est associée à une ou plusieurs expressionsrace.Les expressions asynchrones n'ont pas de résultat si elles sont annulées ; ainsi, toute variable ou autre expression dépendant d'une expression asynchrone annulée n'est pas liée.
Vous avez besoin d'arrêter un comportement complexe après un certain temps ou après le déclenchement d'une séquence complexe d'événements ? Sans l'expression race, vous devriez normalement mettre en place des tests tout au long de votre comportement complexe, notamment des tests d'interrogation. Avec l'expression race, il suffit d'ajouter toutes les conditions d'arrêt comme sous-expressions sœurs au comportement complexe.
race:
ComplexBehavior() # Could be simple or as complex as a whole game
Sleep(60.0) # Timeout after one minute
EventTrigger() # Some other arbitrary test that can be used to stopVous pouvez utiliser le résultat de l'expression race pour déterminer quelle sous-expression s'est terminée en premier ou a gagné la course.
# Adding a unique result to subexpressions so it can
# be used to determine which subexpression won
Winner := race:
block: # task 1
AsyncFunction1()
1
block: # task 2
AsyncFunction2a()
AsyncFunction2b()
AsyncFunction2c()