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

Kotlin协程中async与await不同写法耗时存在差异的原因是什么

Kotlin协程async/await耗时差异原因解析

核心结论

耗时差异和async的返回值行为无关,本质是await()的调用时机不同,导致协程分别以并行、串行模式执行。
Kotlin协程中async默认使用CoroutineStart.DEFAULT启动模式,只要调用async方法,协程就会立即启动执行内部逻辑,不需要等待await()调用。


第一段代码(耗时约1000ms)执行流程

  • 先调用async启动第一个协程,立即执行内部delay(1000)逻辑
  • 无需等待第一个协程执行完成,立刻调用第二个async启动第二个协程,同步执行内部delay(1000)逻辑
  • 两个协程并行运行,1000ms后几乎同时执行完成
  • 后续调用a.await()、b.await()仅用于获取已完成协程的返回结果,无额外等待耗时
  • 总耗时等于单个协程的执行时长1000ms

第二段代码(耗时约2000ms)执行流程

  • 调用第一个async启动协程后,立刻调用await(),此时当前协程会挂起阻塞,直到第一个协程的delay(1000)执行完成、拿到返回值赋值给a后才会继续向下执行
  • 第一个协程执行完毕后,才会调用第二个async启动协程,再次调用await()挂起等待1000ms
  • 两个协程完全串行执行,总耗时等于两个协程执行时长之和2000ms

疑问解答

你猜测的「async返回Deferred和执行后直接返回值的行为不同」不成立,两段代码中async的执行逻辑完全一致,差异仅在于await的调用时机:是先启动所有需要并行的任务再统一等待结果,还是每启动一个任务就立刻等待它执行完成。

内容的提问来源于stack exchange,提问作者최상용

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:06:03