Что выведет код Senior Flow, StateFlow и SharedFlow обновлено
StateFlow и одинаковые значения
Вопрос
Что выведет код? По строке на каждый вывод.
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.*
fun main() = runBlocking {
val state = MutableStateFlow(0)
val job = launch {
state.collect { println("got $it") }
}
yield()
state.value = 1
yield()
state.value = 1
yield()
state.value = 2
yield()
job.cancel()
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: got 0, got 1, got 2. Подписчик сразу получает текущее значение 0.
Что выведет
got 0
got 1
got 2
Разбор
Подписчик сразу получает текущее значение 0. Присваивание 1 доставляется. Повторное присваивание того же значения 1 игнорируется: StateFlow сравнивает через equals и не эмитит равные значения. Затем приходит 2. yield() даёт коллектору в том же потоке шанс обработать каждое изменение.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.