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
相关推荐
木头左1 小时前
【架构设计】教育类 App 服务端化改造:AI 上移、题库分层与个人题库归属
android·架构设计·系统设计·后端开发·数据库设计
墨狂之逸才2 小时前
USB 的 HOST 和 DEVICE 到底有什么区别?ADB 调试应该选哪个?
android
奶油话梅糖3 小时前
苹果的内核跑上了安卓手机:2,631 Star 的 HakiOS 让 XNU 在 Adreno GPU 上画出 118 帧
android·macos·智能手机
恋猫de小郭3 小时前
Flutter THLC 的 WebView 滚动终于从 70 FPS 提升到 120 FPS
android·前端·flutter
好的佩奇14 小时前
Dart 之扩展类型
android·flutter·dart
alexhilton16 小时前
2027 Android 开发者路线图:学习、面试与 AI
android·kotlin·android jetpack
灿飞屋18 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
疯华整猫19 小时前
我用 Trae 把 Android 内存账重算了一遍
android·性能优化·源码
唐青枫20 小时前
Kotlin 对象声明与对象表达式详解
kotlin
TimeFine21 小时前
AI 编程工作流的设计:从人工判断到 AI裁判
android·ai编程