Выбор ответа 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 секунды
- Около 3 секунд
- Около 2 секундправильный ответ
- Код упадёт:
awaitнельзя вызывать дважды подряд
Разбор
Первый async сразу дожидаются через await(), и только потом запускается второй, поэтому a и b идут последовательно, 1 + 1 секунда. Чтобы распараллелить, нужно сначала запустить оба async, а потом ждать: val a = async { }; val b = async { }; a.await() + b.await(). await можно вызывать сколько угодно раз.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.