1. 程式人生 > >kotlin-協程-lzf

kotlin-協程-lzf

協程有兩個概念,一個是協程作用域,第二個是協程,虛擬機器首先會載入協程作用域包括子作用域,因此在各個作用域沒有delay的情況下,從上到下執行作用域中的程式碼,執行完畢後再按照從上到下的順序執行協程中的程式碼

 

fun main1() = runBlocking {
    var order = 1
    // this: CoroutineScope
    for (i: Int in 1..300)
        println("first$i:::${order++}")
    launch {
        //        delay(200L)
//        println("Task from runBlocking")
        delay(2000)
        for (i: Int in 1..300)
            println("fourth$i:::${order++}")
    }
    for (i: Int in 1..300)
        println("second$i:::${order++}")
    coroutineScope {
        // 建立⼀個新的協程作⽤域
        launch {
            for (i: Int in 1..300)
                println("fifth$i:::${order++}")
//            delay(500L)
//            println("Task from nested launch")
//            delay(100L)
//            println("Task from coroutine scope") // 該⾏將在巢狀啟動之前執⾏列印
        }
        for (i: Int in 1..300)
            println("third$i:::${order++}")
//        println("Coroutine scope is over") // 該⾏將在巢狀結束之後才會被打
    }
    for (i: Int in 1..300)
        println("sixth$i:::${order++}")
}

協程作用域和協程中的程式碼執行順序

first second third fourth fifth sixth