当前位置: 首页 > 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
  • 船只深夜撞上海上风机后沉没1死1失踪,调查报告公布
  • TAE联手加州大学开发出新型核聚变装置:功率提升百倍,成本减半
  • 葡萄牙、西班牙突发大范围停电,交通和通信服务受到严重影响
  • “85后”潘欢欢已任河南中豫融资担保有限公司总经理
  • A股三大股指收跌:地产股领跌,银行股再度走强
  • 绵阳造AI机器狗参与警务工作,演练中辅助民警控制“嫌疑人员”