You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin主函数中的协程执行delay后是如何恢复运行的?

Kotlin 纯main函数场景下协程delay恢复执行逻辑

核心依赖Kotlin协程JVM实现的内置调度器、延迟任务队列实现,和Android平台的调度逻辑完全独立,具体流程如下:

  • 首先明确main函数的协程运行环境:你在main函数中启动协程通常有两种写法,要么是用runBlocking包裹协程代码,要么是直接用Kotlin 1.3+支持的suspend fun main,两种场景都会初始化对应调度器的任务队列:
    • runBlocking场景下会在当前main线程绑定专属的事件循环任务队列,阻塞main线程直到内部所有协程执行完成
    • suspend fun main默认使用Dispatchers.Default线程池调度器,内部自带全局任务队列
  • 协程执行delay时的挂起逻辑:
    • 调用delay方法后,当前协程立刻挂起,让出执行权
    • 调度器会把当前协程的续体(Continuation,封装了协程后续要执行的代码逻辑)和指定的延迟时间绑定,封装为延迟任务存入对应的延迟队列
  • 延迟到期后的恢复逻辑:
    • 调度器内部的定时检查逻辑会轮询所有延迟任务,当对应任务的延迟时间到期后,会把任务从延迟队列移动到可执行队列
    • 调度器的工作线程(runBlocking场景下就是被阻塞的main线程,Dispatchers.Default场景下是线程池的空闲工作线程)会取出该任务,调用续体的resume方法
    • 续体恢复后触发协程状态机执行下一个状态的代码,也就是你写在delay之后的逻辑,完成协程的恢复执行

内容的提问来源于stack exchange,提问作者Nikhil kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:27:03