Android 中的 Kotlin - 在 Room 中暂停功能

Kotlin in Android - Suspend Functions in Room

我在 dev-dagger 分支的 https://github.com/android/architecture-samples/tree/dev-dagger/app/src/main/java/com/example/android/architecture/blueprints/todoapp/data/source/local 查看示例,在 TasksLocalDataSource.kt 文件中他们有以下方法:

override suspend fun getTasks(): Result<List<Task>> = withContext(ioDispatcher) {
        return@withContext try {
            Success(tasksDao.getTasks())
        } catch (e: Exception) {
            Error(e)
        }
}

通过使用 withContext 和 IO 作为调度程序,他们希望协程在 IO 线程上 运行。但是方法里面的Room requesttasksDao.getTasks()是一个suspend函数。在 https://codelabs.developers.google.com/codelabs/kotlin-coroutines/#8 的代码实验室中,他们说 Room 在后台线程上处理 运行ning 请求(这里:getTasks() ),当它是一个挂起函数时这里就是这种情况。 那么,使用 withContext(ioDispatcher) 是不是太过分了?我不能像下面这样重写上面的方法吗? :

override suspend fun getTasks(): Result<List<Task>> {
         return Success(tasksDao.getTasks())
}

是的,这正是你应该写的。从引入可挂起的房间调用之前开始,文档中似乎仍有很多遗留问题。将可挂起的函数调用强制到 IO 调度程序中,无论是在可读性和性能方面都是一种浪费。