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

如何用Kotlin Coroutines并行执行多异步任务并统计各任务耗时?

Kotlin协程并行任务实现思路与代码示例

核心思路

  • 用async创建并行任务:每个异步任务通过async包装,在指定调度器(如Dispatchers.Default)下并行执行
  • 单独统计每个任务耗时:在任务执行前后记录系统时间戳,计算时间差得到单任务耗时
  • 用awaitAll批量收集结果:一次性等待所有Deferred完成,统一获取所有任务的结果与耗时数据

代码示例

import kotlinx.coroutines.*
import kotlin.system.measureTimeMillis

// 模拟耗时任务,返回任务结果
private suspend fun doTask(taskId: Int, delayMs: Long): String {
    delay(delayMs)
    return "Task $taskId completed"
}

data class TaskResult(val result: String, val costTimeMs: Long)

fun main() = runBlocking {
    // 定义要执行的任务参数:任务ID、模拟耗时
    val taskParams = listOf(1 to 1000, 2 to 1500, 3 to 800)

    // 启动所有并行任务,每个任务记录耗时
    val deferredTasks = taskParams.map { (id, delay) ->
        async(Dispatchers.Default) {
            val costTime = measureTimeMillis {
                doTask(id, delay)
            }
            TaskResult(doTask(id, delay), costTime)
        }
    }

    // 等待所有任务完成,收集结果
    val allResults = deferredTasks.awaitAll()

    // 输出每个任务的结果与耗时
    allResults.forEach {
        println("${it.result}, 耗时:${it.costTimeMs}ms")
    }

    // 输出总耗时(由于并行,总耗时接近最长的单个任务耗时)
    val totalCost = measureTimeMillis {
        deferredTasks.awaitAll()
    }
    println("总耗时:${totalCost}ms")
}

说明

  • measureTimeMillis是Kotlin标准库工具,用于快速计算代码块的执行耗时
  • async启动的任务会在后台并行执行,awaitAll会阻塞当前协程直到所有任务完成
  • 可以根据实际需求替换Dispatchers.Default为其他调度器(如Dispatchers.IO处理IO密集型任务)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 21:14:59