Kotlin SelectClause0

    @Test
    fun `test SelectClause0`() = runBlocking<Unit> {
        val job1 = GlobalScope.launch {
            delay(100)
            println("Job 1")
        }

        val job2 = GlobalScope.launch {
            delay(10)
            println("Job 2")
        }
        select<Unit> {
            job1.onJoin { println("Job  1 on Job") }
            job2.onJoin { println("Job  2 on Job") }
        }

        delay(1000)

    }
}

执行顺序

点进去看 

onJoin 方法

    @Test
    fun `test SelectClause2`() = runBlocking<Unit> {
        val channels = listOf(Channel<Int>(), Channel<Int>())
        println(channels)
        launch(Dispatchers.IO) {
            select<Unit> {
                launch {
                    delay(10)
                    channels[1].onSend(200) { sendChannel ->
                        println("sent on $sendChannel")
                    }
                }
                launch {
                    delay(100)
                    channels[0].onSend(100) { sendChannel ->
                        println("sent on $sendChannel")
                    }
                }
            }
        }

        GlobalScope.launch {
            println(channels[0].receive())
        }
        GlobalScope.launch {
            println(channels[1].receive())
        }
        delay(100)
    }
}

 

猜你喜欢

转载自blog.csdn.net/mp624183768/article/details/126791341