这不可能再简单了,但我不能理解这里的问题是什么.以下是我的代码:

fun main() {

    val flow = flowOf(1, 2, 3)

    CoroutineScope(Dispatchers.Default).launch {
        println("Launch working")
        flow.collect {
            println("Collect: $it")
        }
    }
}

上面的代码不打印任何内容,甚至连"启动工作"都不打印.我甚至try 使用我自己的CoroutineScope,如以下代码所示:

fun main() {

    val flow = flowOf(1, 2, 3)

    val myCoroutineScope = CoroutineScope(
        CoroutineName("myCoroutineScope")
    )

    myCoroutineScope.launch {
        println("My coroutine scope working")
        flow.collect {
            println("Collect: $it")
        }
    }
}

再说一次,它什么也没打印,甚至连"我的协同程序范围工作"都没打印出来.

我错过了什么吗?

推荐答案

请try 使用runBlockingJob.join()来等待协程完成:

fun main() = runBlocking {

    val flow = flowOf(1, 2, 3)

    val job = CoroutineScope(Dispatchers.Default).launch {
        println("Launch working")
        flow.collect {
            println("Collect: $it")
        }
    }
    job.join()
}

它将阻止执行main()函数,直到收集到flow为止.

Kotlin相关问答推荐

在Webflux应用程序中通过kotlin协程启动fire and forget job

如何避免使用公共类实现内部接口

相当于roomdb中的DateTime Bigint列的是什么

为什么使用 return instance ?: synchronized(this) { instance ?: PreferenceParameterState(context) } 时无法获得单例?

返回 kotlin 中的标签和 lambda 表达式

循环中的每个元素都应填充行中可用的所有可用空间

为什么这个 Kotlin 代码不起作用? (如果 str[index] 在列表中,则打印)

为什么在 Kotlin 中调用私有构造函数会导致错误为无法访问 是什么?

多次运行espresso测试

Kotlin JS JSON 反序列化

参考 Kotlin 中的 Java 接口静态字段

如何使用 gradle 脚本 Kotlin 构建文件构建可运行的 ShadowJar?

什么是 .kotlin_builtins 文件,我可以从我的 uberjars 中省略它们吗?

在 Kotlin 中取最后 n 个元素

Spring Boot:更改属性占位符符号

使用 Kotlin 创建自定义 Dagger 2 范围

Android studio 4.0 新更新版本说 Kotlin 与这个新版本不兼容

在 Kotlin 中编写一个等于 Int.MIN_VALUE 的十六进制整数文字

如何在 firebase 数据库中使用 kotlin 协程

Kotlin:如何使用扩展函数扩展枚举类