2017-04-12 58 views
3

我是新學習者協程和科特林。 爲什麼我會得到不同的結果,下面的情況1和2?科特林協程VAL VS樂趣

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() 
} 

這是VAL風格編碼基本?

回答

11

殼體1相當於

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

也就是說,你開始A,等待它(在此爲協同程序暫停),才把啓動B,從而AB依次執行,不同時。

情況下2您同時啓動AB才把協同程序中止對等待AB

+0

啊,OK!現在我明白了。謝謝您的回覆! –