kotlin - 返回 Kotlin 协程中生成的值

标签 kotlin coroutine

我正在尝试返回从协程生成的值

fun nonSuspending (): MyType {
    launch(CommonPool) {
        suspendingFunctionThatReturnsMyValue()
    }
    //Do something to get the value out of coroutine context
    return somehowGetMyValue
}

我想出了以下解决方案(不太安全!):

fun nonSuspending (): MyType {
    val deferred = async(CommonPool) {
        suspendingFunctionThatReturnsMyValue()
    }
    while (deferred.isActive) Thread.sleep(1)
    return deferred.getCompleted()
}

我也考虑过使用事件总线,但是有没有更优雅的解决方案来解决这个问题?

提前致谢。

最佳答案

你可以做到

val result = runBlocking(CommonPool) {
    suspendingFunctionThatReturnsMyValue()
}

阻塞直到结果可用。

关于kotlin - 返回 Kotlin 协程中生成的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44414272/

相关文章:

kotlin - 使用 Gradle (Kotlin DSL) 导入源依赖项

android - 在 Compose 中使用 DeepLink 会导致无法向后导航

android - 如何在 Kotlin 的枚举中检索用 vararg 声明的参数的值

android - 带有协程的Android应用程序中的Scarlet websocket

android - 将回调 hell 转换为延迟对象

android - 无法更改抽屉导航切换图标

android - android应用开发用什么比较好?是kotlin还是java?

kotlin - 改造成功后,协程问题将数据插入房间数据库

multithreading - 线和纤维有什么区别?

C# 为什么我不应该使用协程?