Выбор ответа Middle Корутины и structured concurrency обновлено

Последовательно или параллельно

Вопрос

Сколько примерно займёт выполнение, если каждый запрос длится 1 секунду?

coroutineScope {
    val a = async { api.first() }.await()
    val b = async { api.second() }.await()
    a + b
}

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Около 2 секунд. Первый async сразу дожидаются через await(), и только потом запускается второй, поэтому a и b идут последовательно, 1 + 1 секунда.

Варианты ответа

  1. Около 1 секунды
  2. Около 3 секунд
  3. Около 2 секундправильный ответ
  4. Код упадёт: await нельзя вызывать дважды подряд

Разбор

Первый async сразу дожидаются через await(), и только потом запускается второй, поэтому a и b идут последовательно, 1 + 1 секунда. Чтобы распараллелить, нужно сначала запустить оба async, а потом ждать: val a = async { }; val b = async { }; a.await() + b.await(). await можно вызывать сколько угодно раз.

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

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