Выбор ответа Senior Flow, StateFlow и SharedFlow обновлено
MutableStateFlow.update и гонки
Вопрос
Почему _state.update { it.copy(count = it.count + 1) } лучше, чем _state.value = _state.value.copy(count = _state.value.count + 1)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: update атомарен через compare-and-set, изменения не теряются. Чтение value, вычисление и запись это три отдельных шага, и между ними другой поток может изменить состояние, его изменение будет затёрто. update работает в цикле compare-and-set: если значение успело измениться, функция вычисляется заново.
Варианты ответа
updateбыстрее, потому что не создаёт копию состоянияupdateатомарен через compare-and-set, изменения не теряютсяправильный ответvalueнельзя присваивать внеMain, аupdateможноupdateотправляет значение, даже если оно не изменилось
Разбор
Чтение value, вычисление и запись это три отдельных шага, и между ними другой поток может изменить состояние, его изменение будет затёрто. update работает в цикле compare-and-set: если значение успело измениться, функция вычисляется заново. Копия создаётся в обоих вариантах, присваивать value можно из любого потока, а одинаковые значения StateFlow не эмитит в обоих случаях.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.