gpt4 book ai didi

android - Room 查询是否异步发生?

转载 作者:行者123 更新时间:2023-12-05 00:16:16 25 4
gpt4 key购买 nike

Room Database查询异步?如果是这样,由于缺乏更好的术语,像这样的异步/竞争条件安全吗?

fun insertThingAsync(thing: Thing) = async(Dispatchers.IO) {
try {
dao.deleteAllThings()
dao.insertThing(thing)
}
catch (e: Throwable) {
// Stuff
}
}

换句话说,在这种情况下,dao 是否可以尝试在 dao.deleteAllThings() 之前插入 thing > 完成,因此也有机会删除新插入的事物

如果是这样,你们都用什么方法来处理这样的事情,以确保在删除完成之前不会尝试插入?

我还想知道 roomDatabase.clearAllTables 的相同用例,因为对话 in this thread .

最佳答案

它们不是异步的如果它们是普通的@Delete@Insert DAO方法,那么它们应该自然地序列化,因为这些方法是同步执行的。

Room 执行异步操作的唯一位置是具有响应式返回值(LiveData、Flowable 等)的 @Query

在不同线程或不同调度程序/调度程序中启动多个事务/操作时,并发修改可能会出现问题。

在您的情况下,您有一个协程,它们将在其中按顺序运行。因此,可以放心地认为您将先删除然后再插入。

您还可以创建事务来执行多个查询。

https://developer.android.com/reference/androidx/room/Transaction

关于android - Room 查询是否异步发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61324402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com