2017-04-12 2 views
3

Ich bin neu lernen, Coroutine und Kotlin. Warum erhalte ich unterschiedliche Ergebnisse, unten Fall 1 und 2?kotlin coroutine val vs Spaß

fun main(args: Array<String>) = runBlocking { 
    fun a() = async(CommonPool) { 
     println("start A") 
     delay(1000) 
     println("finish A") 
    } 

    fun b() = async(CommonPool) { 
     println("start B") 
     delay(1000) 
     println("finish B") 
    } 

    //case 1 
    a().await() 
    b().await() 

    //case 2 
    val A = a() 
    val B = b() 
    A.await() 
    B.await() 
} 

Ist diese Val-Style-Codierung grundlegend?

Antwort

11

Der Fall 1 zu

val A = a() 
await(A) 
val B = b() 
await(B) 

entspricht Das heißt, Sie beginnen A, erwarten sie (hier die Koroutine suspendiert), und erst dann starten Sie B, so A und B sequentiell ausgeführt werden, nicht gleichzeitig.

In Fall 2 starten Sie beide A und B und erst dann die Koroutine aussetzt für A und B warten.

+0

Ah, OK! jetzt verstehe ich. Danke für Ihre Antwort! –