Каким образом организовать ожидание окончания выполнения корутин в асинхронной программе?

Для ожидания окончания выполнения корутин в Kotlin обычно используют функцию join() у объекта Job, который возвращается при запуске корутины.

Короткий ответ

Что ответить на собеседовании

Для ожидания окончания выполнения корутин в Kotlin обычно используют функцию join() у объекта Job, который возвращается при запуске корутины. Если корутина запущена через launch, то она возвращает Job, и вызов job.join() приостанавливает текущий поток до завершения корутины.

Подробный разбор

Ответ с пояснениями

Для ожидания окончания выполнения корутин в Kotlin обычно используют функцию join() у объекта Job, который возвращается при запуске корутины. Если корутина запущена через launch, то она возвращает Job, и вызов job.join() приостанавливает текущий поток до завершения корутины.

Пример:

val job = GlobalScope.launch {
    // какая-то асинхронная работа
    delay(1000)
    println("Coroutine finished")
}

runBlocking {
    job.join() // ждем завершения корутины
    println("Coroutine has completed")
}

Если используется async, то для получения результата и ожидания окончания корутины применяется await().

val deferred = GlobalScope.async {
    delay(1000)
    return@async 42
}

runBlocking {
    val result = deferred.await() // ждем и получаем результат
    println("Result: $result")
}

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку