我们可以选择有或没有suspend
关键字,为房间刀功能。
@Dao
interface UserDao {
@Update
suspend fun updateUsers(vararg users: User)
}
@Dao
interface UserDao {
@Update
fun updateUsers(vararg users: User)
}
无论使用哪种方式,我们仍然可以在Coroutine启动中执行它。
val singleThreadDispatcher = Executors.newSingleThreadExecutor().asCoroutineDispatcher()
lifecycleScope.launch(singleThreadDispatcher) {
userDao.updateUsers(....
}
如果是这样的话,房间道的功能有suspend
关键字的真正目的是什么?
1条答案
按热度按时间nwlls2ji1#
非挂起功能:
暂停功能:
Dispatchers.IO
)这些是一般规则,它们不仅适用于房间。
如果我们在应用程序中不使用协程,我们别无选择--我们必须使用非挂起函数,因为我们无法轻松执行
suspend
函数。如果我们使用协程,
suspend
函数对协程更友好。suspend
函数“说”它将以最佳方式使用协程/线程。我们可以使用非挂起函数,然后通过使用Dispatchers.IO
从协程执行它,但是挂起函数可以以更优化的方式使用资源。通过在Room中切换非挂起和挂起功能,我们使其选择一个完全不同的实现。其中一个通过阻塞等待,另一个通过挂起等待,因此允许线程转到其他地方。
顺便说一句,在你的特定示例中,使用非挂起函数是完全错误的。如上所述,非挂起函数通过阻塞等待,而
lifecycleScope
使用主线程,因此这段代码实际上阻塞了UI。