【发布时间】:2022-07-05 23:41:37
【问题描述】:
是否可以在不阻塞运行的情况下返回 Coroutine Scope 中的值?
现在我在存储库中的代码如下所示:
suspend fun getWorkItem(workItemId: Int): WorkItemRoom? {
runBlocking {
return@runBlocking
CoroutineScope(Dispatchers.Main).launch {
getWorkItemByIdUseCase.build(workItemId)
}
}
return null
}
这是我的用例
class GetWorkItemByIdUseCase(private val workItemDao: WorkItemDao) :
BaseUseCase<Int, WorkItemRoom>() {
override suspend fun create(id: Int): WorkItemRoom {
return workItemDao.getWorkItemById(id)
}
}
基本用例
abstract class BaseUseCase<P, R> {
protected abstract suspend fun create(params: P): R
open suspend fun build(params: P): R = create(params)
}
道
@Dao
abstract class WorkItemDao {
@Query("SELECT * FROM workitem WHERE id=:id")
abstract suspend fun getWorkItemById(id: Int): WorkItemRoom
}
...但我当然知道这不是一个合适的解决方案。您将如何实现这一目标?在viewmodels' or fragments I can directly use lifecycleScope` 中,但在其他情况下,必须直接从下面的方法调用 useCase。一直调用 Dispatchers.Main 效率高吗?
CoroutineScope(Dispatchers.Main).launch { }
【问题讨论】:
标签: android kotlin kotlin-coroutines