为什么这两个挂起功能在Kotlin中没有启动或aync的情况下可以运行?
我正在学习Kotlin的协同程序,我运行代码A并得到结果A 1:我很奇怪为什么两个挂起函数为什么这两个挂起功能在Kotlin中没有启动或aync的情况下可以运行?,kotlin,kotlin-coroutines,Kotlin,Kotlin Coroutines,我正在学习Kotlin的协同程序,我运行代码A并得到结果A 1:我很奇怪为什么两个挂起函数doJob1()和doJob2()都可以在没有launch或aync的情况下运行。你知道,正常情况就像代码1 2:我认为如果代码A可以运行,结果B是预期的。因为doJob1()中的代码delay(3000L)是3s,所以doJob2()将首先运行 代码A import kotlinx.coroutines.* import kotlin.system.* fun main() = runBlocking
doJob1()
和doJob2()
都可以在没有launch
或aync
的情况下运行。你知道,正常情况就像代码1
2:我认为如果代码A可以运行,结果B是预期的。因为doJob1()
中的代码delay(3000L)
是3s,所以doJob2()
将首先运行
代码A
import kotlinx.coroutines.*
import kotlin.system.*
fun main() = runBlocking {
val time = measureTimeMillis {
val one = doJob1()
val two = doJob2()
println("[testSequential] Result ${one + two}")
}
println("[testSequential] Completed in $time ms")
}
suspend fun doJob1(): Int {
println("Job1 Doing")
delay(3000L)
println("Job1 Done")
return 10
}
suspend fun doJob2(): Int {
println("Job2 Doing")
delay(1000L)
println("Job2 Done")
return 20
}
Job1 Doing
Job1 Done
Job2 Doing
Job2 Done
[testSequential] Result 30
[testSequential] Completed in 4011 ms
结果A
import kotlinx.coroutines.*
import kotlin.system.*
fun main() = runBlocking {
val time = measureTimeMillis {
val one = doJob1()
val two = doJob2()
println("[testSequential] Result ${one + two}")
}
println("[testSequential] Completed in $time ms")
}
suspend fun doJob1(): Int {
println("Job1 Doing")
delay(3000L)
println("Job1 Done")
return 10
}
suspend fun doJob2(): Int {
println("Job2 Doing")
delay(1000L)
println("Job2 Done")
return 20
}
Job1 Doing
Job1 Done
Job2 Doing
Job2 Done
[testSequential] Result 30
[testSequential] Completed in 4011 ms
结果B
Job1 Doing
Job2 Doing
Job2 Done
Job1 Done
[testSequential] Result 30
[testSequential] Completed in 4011 ms
代码1
fun main() = runBlocking {
launch { doWorld() } // It use launch
println("Hello,")
}
suspend fun doWorld() {
delay(1000L)
println("World!")
}
runBlocking
启动一个协程,因此您可以从其块内调用挂起函数
您的代码按顺序调用
doJob1()
和doJob2()
,因此它们按该顺序运行。如果希望它们同时运行,则需要使用async
或launch
启动新的协同路由,以启动它们中的每一个。runBlocking
启动协同路由,因此可以从其块内调用挂起函数
您的代码按顺序调用
doJob1()
和doJob2()
,因此它们按该顺序运行。如果希望它们同时运行,则需要使用async
或launch
启动新的协同程序来启动它们。1。挂起函数只能从另一个挂起函数或在协同程序内部调用,而这正是在runBlocking
块中调用这两个函数所要做的。2.除非您启动另一个与launch
或async
内部的协同程序以同时运行其他内容,否则runBlocking
块中的所有代码都将按顺序执行。1。挂起函数只能从另一个挂起函数或在协同程序内部调用,而这正是在runBlocking
块中调用这两个函数所要做的。2.除非您启动另一个与launch
或async
内部的协同程序以同时运行其他内容,否则runBlocking
块中的所有代码都将按顺序执行。