第 62 课2026.09.28
测试两个不同延迟的任务不会提前或乱序完成。
第 62 课:验证多个延迟任务的执行顺序
- 日期:2026-09-28
- 课程序号:第 62 课
- 知识点:分段虚拟时间中的多任务顺序
用途或适用场景
测试两个不同延迟的任务不会提前或乱序完成。
核心概念
advanceTimeBy(1_000) 执行推进途中的 500 毫秒任务,但不执行恰好在 1000 毫秒边界上的任务;runCurrent() 再运行边界任务。
最小代码或操作示例
kotlin
// 沿用第 59 课的 commonTest 依赖与测试导入。
@OptIn(ExperimentalCoroutinesApi::class)
@Test
fun checksOrder() = runTest {
val events = mutableListOf<String>()
launch { delay(1_000); events += "慢" }
launch { delay(500); events += "快" }
runCurrent()
advanceTimeBy(1_000)
assertEquals(listOf("快"), events)
runCurrent()
assertEquals(listOf("快", "慢"), events)
}3~5 分钟练习
把“快”的延迟改成 250 毫秒,保持其余代码不变,预测两个断言。
参考答案
两个断言仍成立:250 毫秒任务在推进途中执行,1000 毫秒任务仍需最后的 runCurrent()。
与上一课的联系
沿用第 61 课的 runTest、advanceTimeBy 与边界 runCurrent();本课只增加第二个延迟任务以核验完成顺序;下一课可进一步记录每个任务完成时的 currentTime。
时效校验
时效校验:2026-09-28(已打开 kotlinx-coroutines-test 1.11.0 的 advanceTimeBy、runCurrent 官方 API;两者仍标为实验性,示例显式 opt-in,未见废弃标记)。