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

如何重构Kotlin协程代码实现图片获取且不使用Deferred

你这段代码的核心需求是并行拉取多日的图片数据,完全可以在保留并行特性的前提下大幅简化,不需要手动维护Deferred列表,也不用逐个调用await,简化后代码如下:

override suspend fun getImages(): List<Images> = coroutineScope {
    val today = LocalDate.now()
    List(numberOfImages) { i ->
        async { 
            val day = today.minusDays(i.toLong())
            api.getImages(day.format(DateTimeFormatter.ISO_DATE)) 
        }
    }.awaitAll()
}

优化点说明

  • 直接用List()构造函数替代for循环生成所有异步任务,省去可变列表的维护开销
  • 调用协程标准库提供的awaitAll()扩展方法一次性等待所有任务执行完成,全程不会显式暴露Deferred类型,符合最新的协程API使用规范
  • 代码逻辑更紧凑,和原有实现的执行效率、异常传播逻辑完全一致,不会有额外副作用

如果有单请求容错的需求,只需要在async的代码块内增加try-catch捕获异常,返回默认值或者空即可,不需要修改整体结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:39:04