【发布时间】:2021-08-21 22:44:47
【问题描述】:
我有两个在 ViewModel 中并行启动的挂起方法:
init {
viewModelScope.launch(Dispatchers.Default) {
launch { loadTotalCirculation() }
launch { loadMarketPrice() }
}
}
private suspend fun loadTotalCirculation() {
val totalCirculation = bitcoinChartsRepository.getTotalCirculation(5, TimeUnit.HOURS)
_viewState.value = _viewState.value.copy(totalCirculation = chartViewEntityMapper(totalCirculation))
}
private suspend fun loadMarketPrice() {
val marketPrice = bitcoinChartsRepository.getMarketPrice(27, TimeUnit.DAYS)
_viewState.value = _viewState.value.copy(marketPrice = chartViewEntityMapper(marketPrice))
}
但是,我想防止在我的两种方法中同时执行 _viewState.value = _viewState.value.copy... 部分。实现这一目标的最佳方法是什么?
【问题讨论】:
-
您可以使用
Mutex,但当您使用viewModelScope时,并发性不应该成为问题,因为它由Dispatchers.Main.immediate支持,因此两种值的修改都将在主UI线程上发生. -
嗨帕维尔,这是一个很好的观点!但是,我在默认调度程序上启动协程,因此它们可以同时运行。我现在已经更新了上面的代码。
标签: android kotlin flow stateflow