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

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

Kotlin 复制代码
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() * 100
    val t = r.toLong() * 10
    delay(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 替换 notifyhttps://blog.csdn.net/zhangphil/article/details/96360104新Java并发线程控制:CountDownLatch等待所有线程运行完毕才执行_countdownlatch倒计时结束了,但是方法没有执行完-CSDN博客文章浏览阅读1.9k次。本文详细介绍Java并发中CountDownLatch的使用方法,演示如何利用它等待一组线程完成后再执行后续操作,适用于需要同步多个线程场景。https://blog.csdn.net/zhangphil/article/details/83443995

相关推荐
传奇开心果编程3 小时前
【Jetpack Compose基础语法学与练】第8课 rememberSaveable,页面旋转/系统重建保留状态
android·学习·ui·kotlin·android jetpack
传奇开心果编程8 小时前
【Jetpack Compose基础语法学与练】第7课 if条件渲染 + 列表基础(LazyColumn)
学习·ui·kotlin·android jetpack
ai2work8 小时前
ch12 系统能力接入:TTS、剪贴板、分享、文件选择器
kotlin
传奇开心果编程9 小时前
【Jetpack Compose基础语法学与练】第9课 SideEffect副作用 + LaunchedEffect,处理异步任务和生命周期
android·学习·ui·kotlin·android jetpack
不要喷香水1 天前
00-总览与架构
kotlin·app·档案管理
hai_android1 天前
Android 组件化开发实践
android·java·kotlin
传奇开心果编程2 天前
【Jetpack Compose基础语法学与练】第6课 TextField文本输入,字符串状态与输入交互
学习·前端框架·kotlin·android jetpack
ai2work3 天前
ch06 Jetpack Compose 入门:状态驱动 UI
kotlin
JMchen3 天前
第 12 篇|项目整合与打包发布 —— 从 Demo 到可安装 APK 的完整收官指南
kotlin·android studio
Android打工仔3 天前
不要在 Data 层随意把 Cold Flow 转换成 Hot Flow
android·架构·kotlin