Uma expressão branch inicia um bloco de uma ou mais subexpressões assíncronas, e qualquer expressão que vem em seguida é executada imediatamente, sem esperar que as expressões branch sejam concluídas.
Você pode usar o branch essencialmente para tratar qualquer bloco de código assíncrono como se fosse um disparo imediato sem espera (fire-and-forget), mas ele ainda precisa ser chamado dentro de um contexto assíncrono.
branch:
# This block continues until completed
AsyncFunction1() # Starts effectively the same time as AsyncFunction3()
Method1() # Block can be mixed with immediate expressions
AsyncFunction2()
AsyncFunction3() # Starts effectively the same time as AsyncFunction1()
# If branch block task is still running when AsyncFunction3 completes
# then any remaining branch task is canceledO código a seguir mostra a sintaxe da expressão branch.
expression0
branch:
slow-expression
mid-expression
fast-expression
expression1O diagrama abaixo mostra o fluxo de execução das expressões.
É semelhante à expressão spawn de concorrência não estruturada, mas o branch permite qualquer bloco arbitrário de código e só é permitido dentro, e limitado por, um contexto assíncrono envolvendo. Por conta disso, branch é preferível em relação a spawn sempre que possível.
Uso de expressão branch
Onde você pode usar uma expressão | |
Tempo de invocação da expressão | Imediato |
Requisitos para o bloco de código de | A expressão |
O que a expressão | O corpo da expressão |
Quando a expressão | A expressão |
Quando a próxima expressão após | Qualquer expressão que vem após a expressão |
Resultado da expressão | Uma expressão |
Atualmente, uma expressão branch não pode ser usada no corpo de uma expressão de iteração, como loop ou for. Se ela deve ser usada, encapsule-a em uma função assíncrona e faça a expressão de iteração chamar essa função.