Обе корутины напечатают индексы от 0 до 10 каждая: всего 22 строки. Их сообщения перемежаются; await jobA не мешает jobB уже выполняться.
Определение вывода асинхронных корутин в Kotlin
Обе корутины напечатают индексы от 0 до 10 каждая: всего 22 строки. Их сообщения перемежаются; await jobA не мешает jobB уже выполняться.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Ниже представлен пример Kotlin‑кода, использующего корутины. Определите, какие сообщения будут напечатаны в консоли при его запуске.
fun main() = runBlocking {
val jobA = async { outputSecond() }
val jobB = async { outputFirst() }
jobA.await()
jobB.await()
}
suspend fun outputFirst() {
for (index in 0..10) {
delay(5)
println("printFirst - $index")
}
}
suspend fun outputSecond() {
for (index in 0..10) {
delay(10)
println("printSecond - $index")
}
}
Ответ
Обе корутины напечатают индексы от 0 до 10 каждая: всего 22 строки. Их сообщения перемежаются; await jobA не мешает jobB уже выполняться.
async запускаются до ожидания. outputFirst обычно выдаёт строки чаще, потому что его delay равен 5 мс, а у outputSecond — 10 мс. Но точное чередование не гарантировано таймерами и планировщиком. Внутри каждой корутины порядок индексов сохраняется; после двух await обе последовательности закончены.