Выбор ответа Middle Исключения в корутинах обновлено

Независимые параллельные запросы

Вопрос

Как загрузить три независимых виджета параллельно, чтобы ошибка одного не отменила остальные?

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

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

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

Коротко

Правильный ответ: supervisorScope, три async и try у каждого await(). В supervisorScope ошибка одного async не отменяет scope и братьев, а исключение достаётся только тому, кто вызвал await(), поэтому каждый await оборачивают в try и подставляют заглушку. coroutineScope с awaitAll отменит всё при первой…

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

  1. coroutineScope с тремя async и awaitAll()
  2. GlobalScope.async для каждого виджета отдельно
  3. supervisorScope, три async и try у каждого await()правильный ответ
  4. runBlocking с тремя launch внутри

Разбор

В supervisorScope ошибка одного async не отменяет scope и братьев, а исключение достаётся только тому, кто вызвал await(), поэтому каждый await оборачивают в try и подставляют заглушку. coroutineScope с awaitAll отменит всё при первой ошибке, это подходит, когда нужны все результаты. GlobalScope ломает structured concurrency, runBlocking блокирует поток.

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

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