Коррекция проблем в асинхронном коде

Код не компилируется, потому что delay вызывается из обычных функций. Сделайте displayFirst и displaySecond suspend; если результат не нужен, используйте launch вместо async.

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

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

Код не компилируется, потому что delay вызывается из обычных функций. Сделайте displayFirst и displaySecond suspend; если результат не нужен, используйте launch вместо async.

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

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

Условие

Требуется обнаружить и устранить некорректное поведение представленного примера на Kotlin.

fun main() = runBlocking {
    async { displaySecond() }
    async { displayFirst() }
}

fun displayFirst() {
    for (idx in 0..10) {
        delay(5)
        println("displayFirst - $idx")
    }
}

fun displaySecond() {
    for (idx in 0..10) {
        delay(10)
        println("displaySecond - $idx")
    }
}

Ответ

Код не компилируется, потому что delay вызывается из обычных функций. Сделайте displayFirst и displaySecond suspend; если результат не нужен, используйте launch вместо async.

fun main() = runBlocking {
    launch { displaySecond() }
    launch { displayFirst() }
}
suspend fun displayFirst() {
    for (idx in 0..10) {
        delay(5)
        println("displayFirst - $idx")
    }
}
suspend fun displaySecond() {
    for (idx in 0..10) {
        delay(10)
        println("displaySecond - $idx")
    }
}

runBlocking дождётся обоих дочерних launch. В каждой последовательности индексы идут от 0 до 10, но точное перемежение между ними зависит от планирования.

Источник: kotlinlang.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее