这是Kotlin Coroutines Cancellation via explicit job的示例代码:
fun main(args: Array<String>) = runBlocking<Unit> {
val job = Job() // create a job object to manage our lifecycle
// now launch ten coroutines for a demo, each working for a different time
val coroutines = List(10) { i ->
// they are all children of our job object
launch(coroutineContext + job) { // we use the context of main runBlocking thread, but with our own job object
delay((i + 1) * 200L) // variable delay 200ms, 400ms, ... etc
println("Coroutine $i is done")
}
}
println("Launched ${coroutines.size} coroutines")
delay(500L) // delay for half a second
println("Cancelling the job!")
job.cancelAndJoin() // cancel all our coroutines and wait for all of them to complete
}
我对表达式+
中的coroutineContext + job
感到困惑?
它在做什么?是运营商覆盖吗?
答案 0 :(得分:3)
这是operator overloading的一个例子。
以下显示了方法CoroutineContext::plus
的文档:
open operator fun plus(context: CoroutineContext): CoroutineContext
返回包含此上下文中的元素和其他上下文中的元素的上下文。此上下文中的元素与另一个中的元素相同,将被删除。
它基本上是两个上下文的合并。