CompletableDeferred:Kotlin 协程中用于一次性挂起通信的工具

很适合处理"等待某个操作完成后再继续"的场景,

CompletableDeferred 有两个状态:

未完成 :调用 await() 的协程会挂起等待。

已完成:await() 立即返回结果,且后续 await() 都会拿到同一个结果。

它不能重复设置值,重复调用 complete() 会返回 false 并忽略第二次。

Kotlin 复制代码
import kotlinx.coroutines.*
import kotlinx.coroutines.CompletableDeferred

suspend fun main() {
    val deferred = CompletableDeferred<Int>()

    // 协程 A:等待结果
    val jobA = CoroutineScope(Dispatchers.Default).launch {
        println("A 等待中...")
        val value = deferred.await()
        println("A 拿到结果: $value")
    }

    // 协程 B:模拟耗时操作后完成
    val jobB = CoroutineScope(Dispatchers.Default).launch {
        println("B 开始干活")
        delay(1000)
        deferred.complete(42)
        println("B 完成,设置结果")
    }

    jobA.join()
    jobB.join()
}

输出结果

Kotlin 复制代码
A 等待中...
B 开始干活
B 完成,设置结果
A 拿到结果: 42
相关推荐
恋猫de小郭44 分钟前
Flutter 的文字为什么比 SwiftUI 更细?问题主要在 Skia 的 256 项查找表里
android·前端·flutter
ii_best1 小时前
安卓手机开发、iOS 手机开发都能用:按键精灵远程调试,设备在千里外也能改脚本
android·ios·智能手机·自动化·按键精灵
stevenzqzq4 小时前
Android Jetpack Compose 列表开发指南:为什么你不需要再为底部 Item 写额外间距
android·android jetpack
撩得Android一次心动12 小时前
Jetpack Compose 知识点整理2【个人用】
android·笔记·学习·kotlin·compose
是真的小外套12 小时前
2024年软考中级信息安全工程师|选择题考点+案例分析真题解析(含答案)
android·网络
用户20187928316715 小时前
一文讲透 Android Native Heap 监控原理:一间"只进不出"的仓库,和总部派来的侦探
android
Ehtan_Zheng15 小时前
Kotlin 伴生块:Android 项目怎么用,迁移时要注意什么
kotlin
JMchen15 小时前
【Jetpack 内核实战 02】ViewModel:生命周期管理与数据持久化核心实战
kotlin·android studio·android jetpack
YB137516 小时前
Jetpack Compose 动画animate*AsState
android