Una expresión branch inicia un bloque de una o más subexpresiones async, y cualquier expresión que le siga se ejecuta inmediatamente, sin esperar a que se completen las expresiones branch.
Puedes utilizar branch esencialmente para tratar cualquier bloque de código asíncrono como si fuera fire-and-forget inmediato, pero aun así debe ser llamada dentro de un contexto asíncrono.
branch:
# Este bloque continúa hasta completarse
AsyncFunction1() # Empieza efectivamente al mismo tiempo que AsyncFunction3()
Method1() # El bloque puede mezclase con expresiones inmediatas
AsyncFunction2()
AsyncFunction3() # Empieza efectivamente al mismo tiempo que AsyncFunction1()
# Si la tarea del bloque de derivación sigue en marcha cuando se completa AsyncFunction3
# entonces se cancela cualquier tarea restante de la derivación
El siguiente código muestra la sintaxis de la expresión branch.
expression0
branch:
slow-expression
mid-expression
fast-expression
expression1
El diagrama siguiente muestra el flujo de ejecución de las expresiones.
Es similar a la expresión de simultaneidad no estructurada spawn, aunque branch permite cualquier bloque de código arbitrario y solo se admite dentro de los límites de un contexto asíncrono envolvente. Por ello, siempre que sea posible, se debe preferir branch frente a spawn.
Uso de la expresión branch
Dónde puedes utilizar una expresión branch |
Contextos asíncronos |
Hora de invocación de la expresión branch |
Inmediato. |
Requisitos para el bloque de código branch |
La expresión branch debe tener al menos una expresión asíncrona. |
Qué hace la expresión branch |
El cuerpo de la expresión branch se inicia en cuanto se encuentra. El cuerpo de la expresión branch continúa evaluándose hasta que el bloque de código o el contexto asíncrono que lo envuelve se completan (lo que ocurra primero), momento en el que se cancela la tarea del bloque de código branch. |
Cuando la expresión branch se completa |
La expresión branch se completa inmediatamente. |
Cuando se inicia la siguiente expresión después de branch |
Cualquier expresión que siga a branch se inicia inmediatamente. |
Resultado de la expresión branch |
Una expresión branch no tiene resultado, por lo que su tipo de resultado es void. |
Una expresión branch no se puede utilizar actualmente en el cuerpo de una expresión de iteración como loop o for. Si se debe utilizar, entonces envuélvelo en una función asíncrona y haz que la expresión de iteración llame a esa función.