协程2-suspend函数

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 {
    
    public val context: CoroutineContext

    public fun resumeWith(result: Result)
}

你可能感兴趣的:(协程2-suspend函数)