本篇解析 example-context-02.kt。探讨一种特殊的调度器行为。
1. 核心概念:Dispatchers.Unconfined
Dispatchers.Unconfined 是一个非受限的调度器。
特点:
- 立即执行:协程在调用者的线程中立即开始执行。
- 恢复位置不确定:当协程遇到第一个挂起点并恢复后,它会在恢复它的挂起点的线程上继续执行。
- 不建议用于普通业务:它不适合一般的异步任务,因为它可能会导致某些逻辑在不可预知的线程(如执行
delay的共享线程池)中运行。
2. 代码解析
1 | launch(Dispatchers.Unconfined) { |
- 执行逻辑:
- 开始时在
main线程运行。 delay结束后,可能在kotlinx.coroutines.DefaultExecutor线程中恢复。
- 开始时在
3. 开发者感悟
Unconfined 主要用于某些对性能极其敏感且不需要切换线程开销的边缘场景。在 Android 实际开发中,应优先选择 Default、IO 或 Main,以保证线程的可预测性。