Skip to main content
Version: Legacy

Асинхронность

Выполнение 2 и более задач

async

в одно и то же время



Как работает async?

Метод async запускает записанные в него задачи в другом потоке, т.е. задачи будут выполняться параллельно и не зависимы от основного скрипта.


Помните что весь скрипт идёт по порядку и каждая задача ждёт завершения предыдущего.

Так что благодаря async вы можете создавать задачи, которые будут выполняться параллельно от основного скрипта.

Пример
/* Данные задачи будут выполняться в основном потоке по порядку */
npc moveTo { players.first() }
npc lookAt { pos(-10, 63, 234) }

/* Теперь в основном потоке открывается новый поток, и эти задачи будут выполняться параллельно */
async {
/* Все задачи, записанные здесь, будут выполняться так же по порядку, но независимо от основного потока */
npc playOnce { "face-bruh" }
}

/* Основной поток идёт дальше, запустив асинхронные задачи */
npc lookAt { players.first() }

Знайте!

Скрипт не завершит свою работу, пока не будут выполнен основной поток и все асинхронные задачи!




Async

Async обычный

Такой async просто есть для того, чтобы запустить задачи параллельно.

async {
... // Все записаные задачи будут выполняться параллельно от основного потока
}

Пример
async {
npc lookAt { players.first() }
}
Async контролируемый

Уже такой async вы сможете контролировать его работу.
Просто привяжите ваш async к переменной

val myAsyncID = async {
... // Асинхронные задачи
}

/* Управление async */
myAsyncID.resume() // Возобновить выполнение задач
myAsyncID.stop() // Прекратить выполнение задач
myAsyncID.join() // Приостанавливает основную часть скрипта до завершения задач внутри async