本篇文档解析 example-basic-05.kt,探讨如何通过 Job 对象显式管理协程的执行顺序。
1. 核心概念:什么是 Job?
当调用 launch 启动一个协程时,它会返回一个 Job 对象。它是协程的句柄,用于控制协程的生命周期。
代码解析
1 | val job = launch { |
- 异步运行:
launch启动后立即返回,执行println("Hello")。 - join() 的作用:
join()会将当前协程(即 main)挂起,直到该job内部的逻辑(即 World!)完成。它确保了后续的println("Done")一定在World!之后打印。
2. 深入理解:Join 的本质
- 语义理解:
join的意思是“加入”。你可以理解为将join()之后的代码块“加入”到该job的任务流末端。 - 非阻塞挂起:
job.join()是一个挂起函数。它不会阻塞线程(CPU 仍可去处理其他事情),它只是暂停了当前协程的执行流程,等待job的信号。
3. 开发者总结
launch负责“启动”任务。Job负责“管理”任务。join()负责“同步”异步任务,使异步流程表现得像同步流程一样。