2017-04-12 47 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!现在我明白了。谢谢您的回复! –