CoroutineScope.launch 函数的 join 方法
时间: 2024-05-07 08:23:35 浏览: 116
在使用 `CoroutineScope.launch` 函数启动协程时,可以通过返回的 `Job` 对象来实现协程间的协作操作。其中,`join()` 方法是一种协作操作,它会阻塞当前协程,直到被等待的协程执行完毕。
具体来说,`join()` 方法会等待被等待的协程执行完毕后才会返回,如果被等待的协程抛出异常,则 `join()` 方法也会抛出相同的异常。同时,如果当前协程被取消,则 `join()` 方法也会抛出 `CancellationException` 异常。
以下是一个简单的示例代码,演示了如何使用 `join()` 方法实现协程间的协作操作:
```kotlin
import kotlinx.coroutines.*
fun main() = runBlocking {
val job1 = launch {
delay(1000)
println("Job 1 is done")
}
val job2 = launch {
delay(2000)
println("Job 2 is done")
}
job1.join()
job2.join()
println("All jobs are done")
}
```
在上述代码中,我们使用 `launch` 函数启动了两个协程 `job1` 和 `job2`,分别延迟 1 秒和 2 秒后打印一条消息。在主协程中,我们通过调用 `join()` 方法来等待这两个协程执行完毕,然后打印一条最终的消息。
如果我们不使用 `join()` 方法等待协程执行完毕,那么程序会在两个协程启动后立即结束,不会等待它们的执行结果。
阅读全文