ebe*_*nki 7 android suspend kotlin android-room kotlin-coroutines
我正在查看https://github.com/android/architecture-samples/tree/dev-dagger/app/src/main/java/com/example/android/architecture/blueprints/todoapp/data/source上的示例/local的dev-dagger分支和TasksLocalDataSource.kt文件中,它们具有以下方法:
override suspend fun getTasks(): Result<List<Task>> = withContext(ioDispatcher) {
        return@withContext try {
            Success(tasksDao.getTasks())
        } catch (e: Exception) {
            Error(e)
        }
}
通过使用withContextIO 作为调度程序,他们希望协程在 IO 线程上运行。但是tasksDao.getTasks()方法里面的 Room 请求是一个挂起函数。在https://codelabs.developers.google.com/codelabs/kotlin-coroutines/#8的代码实验室中,他们说当它是一个挂起函数时负责在后台线程上Room运行请求(此处getTasks():)这里就是这种情况。那么,使用 a 是不是太多了withContext(ioDispatcher)?我不能像下面这样重写上面的方法吗?:
override suspend fun getTasks(): Result<List<Task>> {
         return Success(tasksDao.getTasks())
}
是的,这正是你应该写的。从他们引入可暂停的 Room 调用之前的时间开始,文档中似乎仍然有很多遗留问题。将可挂起的函数调用强制到 IO 调度程序中,在可读性和性能方面都是一种浪费。
| 归档时间: | 
 | 
| 查看次数: | 364 次 | 
| 最近记录: |