gpt4 book ai didi

android - Android 中的 Kotlin Lazy Coroutine

转载 作者:行者123 更新时间:2023-12-02 03:01:45 25 4
gpt4 key购买 nike

我正在尝试为我的协程创建惰性函数。我像这样创建了 util 函数。

fun <T> lazyCoroutine(scope: CoroutineScope, block: suspend CoroutineScope.() -> T): Lazy<T> {

val some = scope.async(start = CoroutineStart.LAZY) {
block.invoke(this)
}
return lazy {
some.await()
}
}

但是在终端显示

my error

我也不想回Deferred<T> ,我只想返回刚出来的 deferred .看了大部分文章返回Deferred<T>这不适合我的场景。有没有相关的解决方案请指点。祝你有美好的一天!

myscenario

最佳答案

I saw most of the article return Deferred<T> which is not suitable with my scenario.

你还没有说清楚Deferred到底有什么不合适的地方? , 但如果事实就是 await()是一个可挂起的函数,那么你似乎要求自相矛盾的结果:你希望用户调用一个不可挂起的函数,但实现使用一个可挂起的函数,你希望整体结果是非阻塞的。无论进行多少包装或调整,您都无法避免来自可挂起域外部的阻塞。

如果您想继续使用普通的、不可挂起的函数,那么根本不要使用协程,它们只是复杂化的另一层,您的线程仍然会阻塞,直到值可用为止。

如果您可以接受可挂起的函数,那么您应该接受Deferred :

fun <T> CoroutineScope.lazyCoroutine(
block: suspend CoroutineScope.() -> T
): Deferred<T> {
return async(start = CoroutineStart.LAZY) { block() }
}

关于android - Android 中的 Kotlin Lazy Coroutine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59819859/

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