gpt4 book ai didi

kotlin - 为什么这段协程代码不打印任何内容?

转载 作者:行者123 更新时间:2023-12-03 08:10:54 26 4
gpt4 key购买 nike

当使用 runBlocking 时,会打印行,但在以下情况下不会打印任何内容

fun main(){
GlobalScope.launch{

println("function started") //printing the first line
delay(1000)
println("function ended") //printing the last line

}}

最佳答案

您的程序在启动的协程有机会启动之前终止。

launch 启动一段异步代码,因此程序可以在调用 launch 后继续运行,而无需等待 launch 的主体执行。当前代码中没有任何内容会在终止程序之前等待此协程完成,因此程序就结束了。

When runBlocking is used the lines are getting printed

我假设您指的是这样运行它:

fun main(): Unit = runBlocking { // this: CoroutineScope
launch {
println("function started") //printing the first line
delay(1000)
println("function ended") //printing the last line
}
}

runBlocking 此处定义了一个 CoroutineScope,可在 lambda 内用作 this。这里的 launch 是在该范围内启动的,这使其成为 runBlocking 的子协程。

根据定义,runBlocking 会阻塞当前线程(这里是主线程),直到所有子协程完成为止。这就是在这种情况下程序等待协程完成的原因。

如果您刚刚学习协程,那么您确实应该避免使用像 GlobalScope 这样精致的 API。相反,尝试坚持使用 structured concurrency 。结构化并发是一种通过父子关系构建协程的方法,这样您就不会因协程泄漏而感到惊讶(就像这个)。

关于kotlin - 为什么这段协程代码不打印任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70847287/

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