kotlin: 协程:用children.foreach可遍历的才是子协程

一,代码:

        //处理按钮点击事件
        binding.button2.setOnClickListener {
            runBlocking {
                val parentJob = launch(CoroutineName("myblock")) {
                    val job1 = launch {
                        println("协程job1: ${this}")
                        println("协程job1: ${coroutineContext[CoroutineName]?.name}")
                        delay(1000)
                    }
                    val job2 = this.launch {
                        println("协程job2: ${this}")
                        println("协程job2: ${coroutineContext[CoroutineName]?.name}")
                        delay(1000)
                    }
                    //.launch{}

                    val job3 = GlobalScope.launch {
                        println("协程job3: ${this}")
                        println("协程job3: ${coroutineContext[CoroutineName]?.name}")
                        delay(1000)
                    }

                    val scopeJob = Job()
                    val scope = CoroutineScope(scopeJob)

                    val job4 = scope.launch {
                        println("协程job4: ${this}")
                        println("协程job4: ${coroutineContext[CoroutineName]?.name}")
                        delay(1000)
                    }

                    val coroutineJob = Job()
                    println("coroutineJob: ${coroutineJob}")
                    val job5 = launch(coroutineJob) {
                        println("协程job5: ${this}")
                        println("协程job5: ${coroutineContext[CoroutineName]?.name}")
                        delay(1000)

                        println("coroutineJob: ${coroutineJob}")
                    }

                    println("children数量:"+coroutineJob.children.count())
                    coroutineJob.children.forEachIndexed { index, job ->
                        println("coroutineJob index:"+index)
                        println("coroutineJob job:"+job)
                    }

                    val job6 = launch(coroutineContext+ Dispatchers.IO) {
                        println("协程job6: ${this}")
                        println("协程job6: ${coroutineContext[CoroutineName]?.name}")
                        delay(1000)
                    }
                }

                delay(300)
                //打印子协程
                println("children数量:"+parentJob.children.count())
                parentJob.children.forEachIndexed { index, job ->
                    println("children index:"+index)
                    println("children job:"+job)
                }
            }
        }

二,运行结果:

image

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