我将在视图模型中启动一个协程来执行一些IO操作,如API调用和数据库查询.我知道有几种方法可以做到这一点,这就是为什么这让我感到困惑,哪种方法是正确的.
这两种方法有什么不同?哪种方法是正确的?
fun loadProducts() {
viewModelScope.launch {
val productsDeferred = async(Dispatchers.IO) { downloadProducts() }
this.products = productsDeferred.await()
}
}
fun loadProducts2() {
viewModelScope.launch {
this.products = withContext(Dispatchers.IO) { downloadProducts() }
}
}
在本例中,我使用一个流从roomdb加载产品.我想让db中的更改反映到用户界面中,这就是我使用流的原因.在调用loadProductsFromDatabaseAsFlow,然后在Collect块中切换到Main时,是否需要将上下文切换到Dispatcher.IO?再问一次,正确的方式是什么?
fun loadProducts3() {
viewModelScope.launch {
loadProductsFromDatabaseAsFlow().collect {
this.products = it
}
}
}