Kotlin协程 runBlocking 和 coroutine

2024-02-27  本文已影响0人  thishejue
class Test {

    fun startTask() = runBlocking {
        println("...【插入任务T】需要造出\"盖子\"、\"标签\"、\"灌完可乐的瓶子\"")

        launch {
            println("......【T1】需要造\"盖子\",需要300ms")
            delay(300)
            println("......【T1】完成")
        }

        launch {
            println("......【T2】需要造\"标签\",需要900ms")
            delay(900)
            println("......【T2】完成(-->到这儿,实际所有T任务结束)")
        }

        coroutineScope { // 这里面的代码可以和coroutineScope之前的launch并发执行
            println("......【S】需要造出\"可乐\"、\"瓶子\"")

            launch {
                println(".........【S1】需要造\"瓶子\",需要600ms")
                delay(600)
                println(".........【S1】完成(-->到这儿,实际所有S任务结束)")
            }

            println(".........【S2】造出\"可乐\",完成")
        }

        // 在coroutineScope里所有代码结束之前,coroutineScope之后的代码不会执行

        println("......【T3】往瓶子里面灌可乐(-->一定是在S完成后执行)")
    }

}

fun main(args: Array<String>) {
    Test().startTask()
    println("【最后回到主流程】加盖子、贴标签")
}

输出log:

...【插入任务T】需要造出"盖子"、"标签"、"灌完可乐的瓶子"
......【S】需要造出"可乐"、"瓶子"
.........【S2】造出"可乐",完成
......【T1】需要造"盖子",需要300ms
......【T2】需要造"标签",需要900ms
.........【S1】需要造"瓶子",需要600ms
......【T1】完成
.........【S1】完成(-->到这儿,实际所有S任务结束)
......【T3】往瓶子里面灌可乐(-->一定是在S完成后执行)
......【T2】完成(-->到这儿,实际所有T任务结束)
【最后回到主流程】加盖子、贴标签

解析下:

上一篇 下一篇

猜你喜欢

热点阅读