gpt4 book ai didi

android - 在 suspendCoroutine block 中调用挂起函数的适当方法是什么?

转载 作者:行者123 更新时间:2023-12-02 13:28:40 29 4
gpt4 key购买 nike

我需要在 suspendCoroutine 中调用挂起函数阻止,在我调用 continuation.resume() 之前.
这样做的适当方法是什么?

private suspend fun someFunction() = suspendCoroutine { cont ->
//...
val myResult = mySuspendingFunction() //<--- The IDE says "Suspension functions can be called only within coroutine body"
cont.resume(myResult)
}

最佳答案

您不能调用 suspend suspendCoroutine 中的函数 block ,因为它接受非挂起 block 作为参数:

suspend inline fun <T> suspendCoroutine(
crossinline block: (Continuation<T>) -> Unit
): T
'suspendCoroutine' 主要在我们有一些带有回调的遗留代码时使用,例如:
suspend fun getUser(id: String): User = suspendCoroutine { continuation ->
Api.getUser(id) { user ->
continuation.resume(user)
}
}
如果函数 someFunction()不使用回调调用 Api,那么您应该重新考虑摆脱“suspendCoroutine”的方法:
private suspend fun someFunction() {
// ...
val myResult = mySuspendingFunction()
// ...
}
如果你还想用 suspendCoroutine移动电话 mySuspendingFunctionsuspendCoroutine堵塞:
private suspend fun someFunction(): String {
val myResult = mySuspendingFunction()

return suspendCoroutine { cont ->
//...
cont.resume(myResult)
}
}

suspend fun mySuspendingFunction(): String {
delay(1000) // simulate request
return "result"
}

关于android - 在 suspendCoroutine block 中调用挂起函数的适当方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62668449/

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