@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)
}
}