Ответ
В Kotlin можно дождаться завершения корутины несколькими способами:
- Использование
join():
val job = launch {
// какой-то код
}
job.join() // ждем завершения
- Использование
runBlocking(для тестов или main-функций):
runBlocking {
launch {
// какой-то код
}
// автоматическое ожидание всех корутин внутри блока
}
- Для нескольких корутин -
joinAll():
val job1 = launch { /* ... */ }
val job2 = launch { /* ... */ }
joinAll(job1, job2)
Важно: join() - suspend-функция, поэтому должна вызываться из корутины или другого suspend-контекста. Не используйте join() в UI-потоке без runBlocking, это приведет к ANR. Для UI лучше использовать async/await или колбэки.