【发布时间】:2021-07-22 20:23:22
【问题描述】:
根据文档,延迟会挂起协程但不会阻塞线程:
延迟是一种特殊的暂停功能。它将协程暂停特定时间。挂起协程不会阻塞底层线程,但允许其他协程运行并使用底层线程的代码。
但是在运行此代码时:
fun main() {
println("1")
GlobalScope.launch {
doSomething()
delay(1000L)
println("3")
}
GlobalScope.launch {
delay(1000L)
println("4")
}
println("5")
}
suspend fun doSomething() {
delay(500L)
println("2")
delay(1000L)
}
给出的输出是:
1
5
2
4
3
根据我的理解,它应该显示1 5 4 2 3。
这是因为doSomething() 在第一个协程中被调用,因此与第二个协程相比延迟更多,并且第二个协程被异步调用。我的误会在哪里?
同样使用这段代码,两个值会在 2 秒后打印在一起:
fun main() {
GlobalScope.launch {
val value1 = doSomething1()
val value2 = doSomething2()
println(value1)
println(value2)
}
}
suspend fun doSomething1(): String {
delay(1000L)
return "This is the answer1"
}
suspend fun doSomething2(): String {
delay(1000L)
return "This is the answer2"
}
这是为什么?
【问题讨论】:
标签: multithreading kotlin kotlin-coroutines