Что выведет код Middle Корутины и structured concurrency обновлено

async, await и структура

Вопрос

Что выведет код? По строке на каждый вывод.

import kotlinx.coroutines.*

suspend fun work(name: String, ms: Long): String {
    delay(ms)
    println("done $name")
    return name.uppercase()
}

fun main() = runBlocking {
    val a = async { work("a", 200) }
    val b = async { work("b", 100) }
    println("waiting")
    println(a.await() + b.await())
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: waiting, done b, done a, AB. Оба async запущены сразу и работают параллельно.

Что выведет

waiting
done b
done a
AB

Разбор

Оба async запущены сразу и работают параллельно. Сначала печатается waiting, потом b с задержкой 100 мс завершается раньше a (200 мс). await возвращает результаты в порядке, который мы задали в выражении, поэтому итог AB.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.