Выбор ответа Junior Flow, StateFlow и SharedFlow спрашивают часто обновлено
Что значит холодный Flow
Вопрос
Что произойдёт, если у val f = flow { println("start"); emit(1) } вызвать collect два раза?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: start два раза: блок выполняется для каждого коллектора. Обычный Flow холодный: код билдера не выполняется при создании и запускается заново при каждом collect.
Варианты ответа
startдва раза: блок выполняется для каждого коллектораправильный ответstartнапечатается один раз, второй подписчик получит закешированное значение- Второй
collectбросит исключение: поток уже собран startнапечатается при созданииf, а не приcollect
Разбор
Обычный Flow холодный: код билдера не выполняется при создании и запускается заново при каждом collect. Поэтому два коллектора это два запуска, и если внутри сетевой запрос, будет два запроса. Кеширования нет, исключения нет. Разделить один запуск между подписчиками позволяют shareIn/stateIn.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.