Я изучаю сопрограммы Kotlin, я запускаю Код A и получаю Результат A .
1: Мне очень странно, почему две функции приостановки doJob1()
и doJob2()
могут работать без launch
или aync
. Вы знаете, нормальный случай - это как Код 1 .
2: Я думаю, что Результат B будет ожидаемым, если Код A может работать. Поскольку код delay(3000L)
в doJob1()
равен 3 с, поэтому сначала будет выполняться 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
}
Результат A
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!")
}