Выбор ответа Junior Flow, StateFlow и SharedFlow спрашивают часто обновлено

Что значит холодный Flow

Вопрос

Что произойдёт, если у val f = flow { println("start"); emit(1) } вызвать collect два раза?

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

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

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

Коротко

Правильный ответ: start два раза: блок выполняется для каждого коллектора. Обычный Flow холодный: код билдера не выполняется при создании и запускается заново при каждом collect.

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

  1. start два раза: блок выполняется для каждого коллектораправильный ответ
  2. start напечатается один раз, второй подписчик получит закешированное значение
  3. Второй collect бросит исключение: поток уже собран
  4. start напечатается при создании f, а не при collect

Разбор

Обычный Flow холодный: код билдера не выполняется при создании и запускается заново при каждом collect. Поэтому два коллектора это два запуска, и если внутри сетевой запрос, будет два запроса. Кеширования нет, исключения нет. Разделить один запуск между подписчиками позволяют shareIn/stateIn.

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

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