La expresión spawn inicia una invocación de función asíncrona, y cualquier expresión que siga a spawn se ejecuta inmediatamente, mientras que la tarea de función asíncrona iniciada continúa independientemente hasta completarse.
# Continúa hasta completarse sin bloquearse.
spawn{AsyncFunction1()} # Iniciada al mismo tiempo que expression0.
expression0 # Iniciada al mismo tiempo que AsyncFunction1().
El siguiente código muestra la sintaxis de la expresión spawn.
expression0
spawn{ expression1 }
expression2
El diagrama siguiente muestra el flujo de ejecución de las expresiones.
Aunque es similar a branch, el cuerpo de spawn se limita a una única llamada a una función asíncrona. También se permite fuera de un contexto asíncrono, por lo que puede invocarse tanto dentro de funciones no asíncronas como asíncronas.
Una expresión spawn debe tratarse como una escotilla de escape de emergencia, mientras que branch debe utilizarse en lugar de spawn siempre que sea posible.
Uso de la expresión spawn
Dónde puedes utilizar una expresión spawn |
Cualquier contexto. |
En qué momento se invoca la expresión spawn |
Inmediatamente. |
Requisitos para el bloque de código spawn |
El cuerpo de la expresión spawn se inicia en cuanto se encuentra. Debe tener al menos una expresión asíncrona. |
Qué hace la expresión spawn |
El cuerpo de spawn crea un contexto asíncrono como el cuerpo de una función asíncrona. Sin embargo, solo se permite una única llamada a una función asíncrona dentro del cuerpo de spawn. La función asíncrona de spawn se inicia tan pronto como se encuentra y evalúa todo lo posible hasta que encuentra algo que suspende o bloquea. La función asíncrona generada continúa evaluando hasta que se completa sin ninguna otra conexión con el lugar donde se generó. |
Cuándo se completa la expresión spawn |
La expresión spawn se completa inmediatamente. |
Cuándo se inicia la siguiente expresión después de spawn |
Cualquier expresión que siga a spawn se inicia inmediatamente. |
Resultado de la expresión spawn |
Una expresión spawn tiene un resultado de tarea. |