kotlin: 协程: runBlocking 只会等待自己子协程执行结束

一,runBlocking中运行子协程

代码:

       //处理按钮点击事件
        binding.button4.setOnClickListener {
            runBlocking {
                println("main start") // 1

                val job = launch { // TODO 协程
                    println("launch 1 start") // 2
                    delay(1000L) // 延迟1
                    println("launch 1 end") // 3
                }

                println("main mid") // 4
                launch(context = job) { // TODO 子协程
                    println("launch 2 start") // 5
                    delay(2000L) // 延迟2
                    println("launch 2 end") // 6
                }

                println("main end") // 7
            }
            println("runBlocking运行结束");
        }

运行结果:

image

二,runBlocking中运行非子协程

代码:

        //处理按钮点击事件
        binding.button5.setOnClickListener {
            runBlocking {
                println("main start") // 1

                val job = GlobalScope.launch { // TODO 全局协程
                    println("launch 1 start") // 2
                    delay(1000L) // 延迟1
                    println("launch 1 end") // 3
                }

                println("main mid") // 4
                launch(context = job) { // TODO 子协程
                    println("launch 2 start") // 5
                    delay(2000L) // 延迟2
                    println("launch 2 end") // 6
                }

                println("main end") // 7
            }
            println("runBlocking运行结束");
        }

运行结果:

image

 

posted @ 2025-08-16 08:09  刘宏缔的架构森林  阅读(26)  评论(0)    收藏  举报