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

Kotlin协程多个async调用中如何实现b执行完成后再启动c?

Kotlin协程异步任务依赖执行实现方案

要实现c任务等待b任务执行完成后再启动,其余任务保持并行的需求,只需调整async的启动时机即可,正确实现代码如下:

coroutineScope {
    val aFetcher = async { a.fetch() }
    val bFetcher = async { b.fetch() }
    val dFetcher = async { d.fetch() }

    // 等待b任务执行完成后再启动c任务
    val bResult = bFetcher.await()
    val cFetcher = async { c.fetch() }

    Merged(
        aFetcher.await(),
        bResult,
        cFetcher.await(),
        dFetcher.await()
    )
}

逻辑说明

  • 初始阶段同时启动a、b、d三个异步任务,三者保持并行执行,不会互相阻塞
  • 调用bFetcher.await()后,当前协程会挂起直到b任务执行完成,之后才会初始化cFetcher启动c任务,严格满足依赖要求
  • 最终等待所有任务结果返回后构造Merged对象,d任务全程和a、b并行执行,不会被c的启动逻辑拖累执行效率

注意事项

不要提前初始化所有async任务,若cFetcher和其他三个任务同时定义,不管后续何时调用await,c任务都会在定义时立刻启动,无法实现等待b的需求。

内容的提问来源于stack exchange,提问作者Matias Barrios

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:57:05