Код не компилируется, потому что 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.