suspend fun test(){
delay(500)
println("A")
delay(500)
println("B")
}
可以认为上述代码,经过编译器的黑魔法,编译成如下代码
fun test(continuation:Continuation){
when(continuation.flag)
0->{
continuation.flag = 1
delay(500,object:Containuation:{
test(continuation)
})
}
1->{
println("A")
continuation.flag = 2
delay(500,object:Containuation:{
test(continuation)
})
}
2->{
println("B")
continuatino.resume(Unit)
}
}
Continauation
public interface Continuation<in T> {
public val context: CoroutineContext
public fun resumeWith(result: Result<T>)
}