Выражение rush используется для конкурентного (одновременного) запуска блока из двух или более асинхронных выражений.
Выполняется расчёт всех выражения, стоящих после rush, а при завершении более быстрого выражения расчёт всех остальных выражений продолжается.
set WinnerResult = rush:
# Все три асинхронные функции начинают выполняться одновременно
AsyncFunctionLongTime()
AsyncFunctionShortTime() # Это выражение завершилось первым, и его результат используется
AsyncFunctionMediumTime()
# Следующее выражение вызывается после завершения самой быстрой из асинхронных функций (AsyncFunctionShortTime()).
# Задачи всех остальных подвыражений (AsyncFunctionLongTime(), AsyncFunctionMediumTime()) продолжаются.
NextExpression(WinnerResult)
AsyncFunction4()
# Если задачи любых подвыражений блока rush ещё выполняются на момент завершения AsyncFunction4,
# они будут отменены.
В следующем коде показан синтаксис выражения rush.
expression0
rush:
slow-expression
mid-expression
fast-expression
expression1
На блок-схеме ниже представлен ход выполнения выражений.

Использование выражения rush
Где можно использовать выражение rush |
Асинхронные контексты |
Время обращения к выражению rush |
Асинхронно |
Требования к блоку кода rush |
Тело выражения rush должно содержать как минимум два выражения, каждое из которых должно быть асинхронным. |
Что делает выражение rush |
Оно похоже на выражение race, но его выражения продолжают выполняться после завершения первого выражения. Если несколько выражений завершаются при одном и том же обновлении симуляции, то «побеждает» то завершившееся выражение, которое встретилось раньше. Любые незавершённые выражения продолжают выполняться до тех пор, пока они не завершатся, или пока не завершится окружающий их асинхронный контекст, после чего все оставшиеся «проигравшие» выражения отменяются (в зависимости от того, что произойдёт раньше). |
Когда завершается выражение rush |
Выражение rush завершается, когда завершено первое выражение в блоке кода. Это может быть самое быстрое, самое короткое, самое первое или наименьшее по времени выполнения выражение. |
Когда запускается выражение, следующее за rush |
Любое выражение, следующее за rush, запускается, когда завершается выполнение завершившегося выражения. |
Результат выражения rush |
Результатом выражения rush является результат выражения, завершившегося первым. Результат будет относиться к наиболее общему совместимому типу всех выражений в блоке кода. |
На данный момент выражение rush не может использоваться в теле выражения цикла, такого как loop или for. Если, тем не менее, выражение нужно вызывать в цикле, поместите его в асинхронную функцию и вызывайте эту функцию в выражении цикла.