TJ *_*sen 2 android asynchronous kotlin android-room
房间数据库查询是异步的吗?如果是这样,由于缺乏更好的术语,像这样的异步/竞争条件安全吗?
fun insertThingAsync(thing: Thing) = async(Dispatchers.IO) {
try {
dao.deleteAllThings()
dao.insertThing(thing)
}
catch (e: Throwable) {
// Stuff
}
}
Run Code Online (Sandbox Code Playgroud)
换句话说,在这种情况下,是否有可能在完成之前dao尝试插入,因此也有机会删除新插入的内容?thingdao.deleteAllThings()thing
如果是这样,你们都用什么方法来处理这样的事情,以确保在删除完成之前不会尝试插入?
roomDatabase.clearAllTables由于此线程中的对话,我还想知道与 的相同用例。
它们不是异步的。如果它们是普通方法@Delete和@InsertDAO 方法,那么它们应该自然地序列化,因为这些方法是同步执行的。
Room 执行异步操作的唯一地方是使用@Query响应式返回值(LiveData、Flowable 等)。
在不同线程或不同调度程序/调度程序中启动多个事务/操作时,可能会出现并发修改问题。
在您的情况下,您有一个协程,它们将在其中按顺序运行。因此,可以放心地认为您将先删除然后再插入。
您还可以创建Transaction执行多个查询。
https://developer.android.com/reference/androidx/room/Transaction
| 归档时间: |
|
| 查看次数: |
1930 次 |
| 最近记录: |