存储库类内部的协程作用域

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储库类内部的协程作用域相关的知识,希望对你有一定的参考价值。

假设我有一个Dto列表,我想遍历它们并设置一些值,然后将它们插入/更新到我的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 ..创建一个repositoryScopeScope?也许是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)
}

以上是关于存储库类内部的协程作用域的主要内容,如果未能解决你的问题,请参考以下文章

我如何才能等到我的 Android 应用程序中的协程作用域执行完成?

深入理解Kotlin协程协程作用域启动模式调度器异常和取消使用篇

Kotlin协程

Kotlin协程

kotlin协程

浅析kotlin协程launch delay调用