当前位置: 首页 > news >正文

Kotlin await等待多个异步任务都完成后才进行下一步操作

Kotlin await等待多个异步任务都完成后才进行下一步操作

 

import kotlinx.coroutines.*fun main() {runBlocking {val tagA = "a"val tagB = "b"val a = async {worker(tagA)}val b = async {worker(tagB)}println("${System.currentTimeMillis()} 等待 $tagA $tagB 都完成...")val c = "${System.currentTimeMillis()} ${a.await()} ${b.await()}"println("${System.currentTimeMillis()} $tagA $tagB 都完成! $c")}
}suspend fun worker(tag: String) {println("${System.currentTimeMillis()} $tag start")val r = Math.random() * 100val t = r.toLong() * 10delay(t)println("${System.currentTimeMillis()} $tag 完成 time=$t")
}

代码运行后,必须等待a,b两个异步任务都返回结果后才能进行下一步操作。

1745847553470 等待 a b 都完成...
1745847553478 a start
1745847553480 b start
1745847553822 b 完成 time=330
1745847553960 a 完成 time=470
1745847553961 a b 都完成! 1745847553470 kotlin.Unit kotlin.Unit

 

这在业务开发中比较有用,试想一种场景,一个任务c的执行,必须依赖(等待)另外两个并行子任务a,b的结果,但这两个并行任务a、b何时结束何时返回结果并不确定。把a、b包装成suspend任务,通过关键字await(),等待两个异步任务a,b都完成后才进行下一步c。

 

 

Java线程同步与阻塞ReentrantLock - Condition替换wait - notify_reentrantlock 替换 notify-CSDN博客文章浏览阅读666次。import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class Main { private ReentrantLock lock = new ReentrantLock(false); private Condition con..._reentrantlock 替换 notify https://blog.csdn.net/zhangphil/article/details/96360104新Java并发线程控制:CountDownLatch等待所有线程运行完毕才执行_countdownlatch倒计时结束了,但是方法没有执行完-CSDN博客文章浏览阅读1.9k次。本文详细介绍Java并发中CountDownLatch的使用方法,演示如何利用它等待一组线程完成后再执行后续操作,适用于需要同步多个线程场景。 https://blog.csdn.net/zhangphil/article/details/83443995

 

相关文章:

  • web技术与nginx网站环境部署
  • docker搭建swarm集群
  • node.js 实战——mongoDB
  • 【Docker】——在Docker工具上安装创建容器并完成项目部署
  • Flink HA 总结
  • 人工智能大语言模型与AI芯片新进展:技术演进与商业化路径
  • 【3D基础】深入解析OBJ与MTL文件格式:Blender导出模型示例及3D开发应用
  • 【Linux】第十二章 安装和更新软件包
  • deepseek对IBM MQ SSL 证书算法的建议与解答
  • 自动驾驶L4级技术落地:特斯拉、Waymo与华为的路线之争
  • [三分钟]web自动化测试(三):selenium自动化测试常用函数(下)
  • 突破JVM边界:类加载三重门与栈帧的生存法则
  • x-cmd install | Orbiton:极简至上的终端文本编辑器与轻量级 IDE
  • wps批注线条怎么取消去掉wps批注后有竖线
  • idea启动springboot方式及web调用
  • 数据库基础与核心操作:从概念到实战的全面解析
  • Linux进程7-signal信号处理方式验证、可重入函数举例、信号集函数验证、信号集阻塞验证
  • Github两种鉴权模式PAT与SSH
  • 【Shell 脚本入门】轻松上手的实战指南
  • DIFY教程第三弹:构建一个智能生成图片的Agent
  • “浦东时刻”在京展出:沉浸式体验海派风情
  • 青年与人工智能共未来,上海创新创业青年50人论坛徐汇分论坛举办
  • 高盛上调A股未来12个月目标点位,沪深300指数潜在回报15%
  • 胖东来发布和田玉、翡翠退货说明:不扣手续费等任何费用
  • 高进华“控股”后首份年报出炉,史丹利账上可动资金大幅缩水
  • 创新创业50人论坛开幕在即,双创青年为何选择来上海筑梦?