kotlin-协程-lzf

本文深入探讨了协程作用域和协程的执行顺序,通过一个具体的Kotlin示例,展示了不同协程如何按顺序执行,并解释了在无延迟情况下,代码如何先执行作用域再执行协程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

协程有两个概念,一个是协程作用域,第二个是协程,虚拟机首先会加载协程作用域包括子作用域,因此在各个作用域没有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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值