我正在使用Firebase Firestore在云上存储一些数据,我意识到我正在使用Main(UI)调度器来调用挂起和非挂起函数。这会导致我冻结UI吗?
有一个调用Firestore:
suspend fun saveTask(task: Task) {
tasksCollection
.document(task.id)
.set(task.toTaskDataMap())
.await() // This is the suspending function.
}
从视图模型调用存储库:
fun onSaveTaskClicked() = viewModelScope.launch(saveTaskExceptionHandler) {
val task: Task = /* Building the task class */
/* Validating the task data */
taskRepository.saveTask(task)
/* Navigation logic after task is successfully saved */
}
我是否应该使用IO调度器调用saveTask()函数?
1条答案
按热度按时间qkf9rpyu1#
绝对不行
suspend
函数(类似于await()
)的要点是它不会阻塞。IO用于调用 * 阻塞 * IO函数。可以编写一个调用阻塞代码的挂起函数,而不使用适当的分派器。这将是一个阻塞的挂起函数,但它违反了惯例,是不正确的。你可以相信来自Google和Square等知名来源的库不会暴露错误的阻塞挂起函数。