android 在Kotlin协程中是否需要使用IO调度器来进行Firestore调用?

chhkpiq4  于 2023-05-21  发布在  Android
关注(0)|答案(1)|浏览(221)

我正在使用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()函数?

qkf9rpyu

qkf9rpyu1#

绝对不行suspend函数(类似于await())的要点是它不会阻塞。IO用于调用 * 阻塞 * IO函数。
可以编写一个调用阻塞代码的挂起函数,而不使用适当的分派器。这将是一个阻塞的挂起函数,但它违反了惯例,是不正确的。你可以相信来自Google和Square等知名来源的库不会暴露错误的阻塞挂起函数。

相关问题