2017-04-12 3 views
3

私はコルーチンとコトリンを学ぶ新しい人です。 以下のケース1と2の結果が異なるのはなぜですか?コトリンコルーチンヴァル対ファン

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

このヴァルスタイルのコーディングは基本的ですか?

答えて

11

ケース1(ここでコルーチンが中断)あなたはそれを待って、A開始、

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

に相当し、そしてのみ、あなたはABが順次実行され、したがって、B開始同時にではありません。

2ケースでは、起動の両方ABだけにしてコルーチンがABを待って中断します。

+0

ああ、OK!今分かります。あなたの返信ありがとう! –

関連する問題