Una expresión de derivación branch inicia un bloque de una o más subexpresiones asíncronas y cualquier expresión que le siga se ejecuta inmediatamente, sin esperar a que se completen las expresiones branch.
Usar branch esencialmente permite tratar cualquier bloque de código asíncrono como si fuera de modo fire and forget inmediato, aunque todavía debe ser llamado en un contexto asíncrono.
branch:
# Este bloque continúa hasta completarse
AsyncFunction1() # Empieza al mismo tiempo que AsyncFunction3()
Method1() # El bloque puede mezclase con expresiones inmediatas
AsyncFunction2()
AsyncFunction3() # Empieza 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 para la expresión branch.
expression0
branch:
slow-expression
mid-expression
fast-expression
expression1
El siguiente diagrama muestra el flujo ejecución de las expresiones.
Es similar a la expresión spawn de concurrencia no estructurada, pero branch permite cualquier bloque de código arbitrario, y solo está permitido dentro de un contexto asíncrono envolvente y delimitado por este. Por ello, siempre que sea posible, se debe preferir branch a spawn.
Uso de la expresión branch
Dónde se puede usar una expresión branch |
Contextos asíncronos |
Tiempo de invocación de la expresión branch |
Inmediato |
Requisitos para el bloque de código de 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 apenas se encuentra. El cuerpo de la expresión branch continúa evaluándose hasta que se completa el bloque de código o se completa el contexto asíncrono adjunto, lo que ocurra primero, momento en el que se cancela la tarea de bloque de código de branch. |
Cuándo se completa la expresión branch |
La expresión branch se completa inmediatamente. |
Cuándo comienza la siguiente expresión después de branch |
Cualquier expresión que siga a la expresión branch se inicia inmediatamente. |
Resultado de la expresión branch |
Una expresión branch no tiene ningún resultado, por lo que su tipo de resultado es void. |
Una expresión branch no se puede utilizar en el cuerpo de una expresión de iteración como loop o for. Si es necesario utilizarla, envuélvela en una función asíncrona y haz que la expresión de iteración llame a esa función.