Выражение branch начинает блок из одного или нескольких асинхронных подвыражений, и любое последующее выражение выполняется немедленно, без ожидания завершения выполнения выражений в блоке branch.
Выражение branch можно использовать, если блок кода требует немедленного нерегулируемого воспроизведения, но этот блок всё равно должен вызываться в асинхронном контексте.
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 canceledВ следующем коде показан синтаксис выражения branch.
expression0
branch:
slow-expression
mid-expression
fast-expression
expression1На блок-схеме ниже представлен ход выполнения потока выражений.
Он похож на неструктурированную конкурентность выражения spawn, однако branch позволяет выполнить любой произвольный блок кода, и оно допустимо только в окружающем асинхронном контексте и ограничено этим контекстом. По этой причине по возможности лучше использовать выражение branch, а не spawn.
Использование выражения branch
Когда можно использовать выражение | |
Время обращения к выражению | Немедленно |
Требования к блоку кода | Выражение |
Что делает выражение | Тело выражения |
Когда завершается выражение | Выражение |
Когда запускается следующее выражение после | Любое выражение, следующее за выражением |
Результат выражения | Выражение |
В настоящее время выражение branch не может использоваться в теле выражения цикла, такого как loop или for. Если, тем не менее, выражение `branch` нужно вызывать в цикле, поместите его в асинхронную функцию и вызывайте эту функцию в выражении цикла.