gpt4 book ai didi

android - 从协程范围返回值而不使用 runBlocking

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

我正在尝试根据 repo 调用的响应数据运行一个函数,并遇到竞争条件/使用协程范围返回数据的问题。基于这两个伪代码块,我想知道是否可以得到一些帮助?
选项 1:如果不使用 runBlocking,则无法在协程范围内返回响应。

fun mainFunction(): Boolean {
return subFunction(getResponse()) //returns boolean
}

private fun getResponse () {
scope.launch{
val response = async { someApiCall }.await()

return response
}
}
选项 2: response subFunction 时值尚未初始化被调用,从而导致错误。
lateinit var response: MutableList<>

fun mainFunction(): Boolean {
return subFunction(response) //returns boolean
}

private fun getResponse () {
scope.launch{
response = async { someApiCall }.await()
}
}

最佳答案

案例1:主函数返回一些东西

suspend fun mainFunction(): Boolean = subFunction(getResponse())

fun subFunction(input: Response): Boolean {
// Do something
return something
}

suspend fun getResponse() = withContext(Dispatchers.IO) {
someApiCall()
}
然后是 mainFunction 的调用者是一劳永逸,我们可以使用 scope.launch .
fun metaMainFunction() {
scope.launch {
val isSomething = mainFunction()
// Do something with isSomething
}
}
案例二: mainFunction是一劳永逸,我们将相同的行为应用于 metaMainFunction案例 1
fun mainFunction() {
scope.launch {
val response = getResponse()
// Do something with response
}
}
最佳实践是被调用者应该决定执行哪个线程。在这种情况下,我们应该始终使用 withContext(Dispatchers.IO)对于 getResponse() .

关于android - 从协程范围返回值而不使用 runBlocking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67757013/

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