gpt4 book ai didi

android - 存储库类中的协程范围

转载 作者:行者123 更新时间:2023-12-02 13:19:44 26 4
gpt4 key购买 nike

假设我有一个 Dtos 列表,我想遍历它们并设置一些值,然后将它们插入/更新到我的 Room 数据库。因此,我从我的 ViewModel 调用存储库类,在那里运行循环,然后调用 dao.insertItems(list)。


fun updateItems(itemList: List<ItemDto>) {
val readDate = DateUtils.getCurrentDateUTCtoString()
???SCOPE???.launch(Dispatchers.IO) {
for (item in itemList)
item.readDate = readDate
itemDao.updateItems(itemList)
}
}


问题是我必须在 Repository 类中使​​用什么样的 CourtineScope。
我是否必须使用 Dispatchers.Main.. 创建一个 repositoryScope?也许是 GlobalScope..?

最佳答案

您应该将存储库 API 编写为 suspend代替函数,就像这样

suspend fun updateItems(itemList: List<ItemDto>) = withContext(Dispatchers.IO) {
val readDate = DateUtils.getCurrentDateUTCtoString()
for (item in itemList)
item.readDate = readDate
itemDao.updateItems(itemList)
}

编辑:如果您需要在 View 模型被销毁后运行它,请使用 NonCancellable 启动它,
suspend fun updateItems(itemList: List<ItemDto>) = withContext(Dispatchers.IO + NonCancellable) {
val readDate = DateUtils.getCurrentDateUTCtoString()
for (item in itemList)
item.readDate = readDate
itemDao.updateItems(itemList)
}

关于android - 存储库类中的协程范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59060874/

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