渐进式编程课
KMP 目录
第 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,未见废弃标记)。

官方参考