kotlin中 协程的构建器
·
本文同步发表于微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新
Kotlin 协程的构建器主要分为以下几类:
1. 基础构建器
launch
-
返回
Job对象,不返回结果 -
用于执行"发射后不管"的异步操作
val job = CoroutineScope(Dispatchers.IO).launch {
delay(1000)
println("Task completed")
}
job.join() // 等待完成
async
-
返回
Deferred<T>(继承自Job),可以返回结果 -
用于需要获取执行结果的并发操作
val deferred = CoroutineScope(Dispatchers.IO).async {
delay(1000)
"Result"
}
val result = deferred.await() // 获取结果
2. 运行阻塞构建器
runBlocking
-
阻塞当前线程直到协程执行完毕
-
主要用于桥接非协程代码和协程代码(如 main 函数、测试)
fun main() = runBlocking {
delay(1000)
println("Done")
}
3. 作用域构建器
coroutineScope
-
创建一个协程作用域,会等待所有子协程完成
-
挂起函数,不阻塞线程
suspend fun doWork() = coroutineScope {
val job1 = launch { delay(1000) }
val job2 = launch { delay(2000) }
// 等待两个子协程都完成
}
supervisorScope
-
类似于
coroutineScope,但子协程失败不会影响其他子协程
suspend fun doWork() = supervisorScope {
val job1 = launch { throw Exception() } // 失败不影响 job2
val job2 = launch { delay(1000) }
}
4. 生产者构建器
produce
-
返回
ReceiveChannel,用于构建生产者-消费者模式
val channel = CoroutineScope(Dispatchers.Default).produce {
for (i in 1..5) {
send(i)
}
}
channel.consumeEach { println(it) }
5. 其他常用构建器
withContext
-
切换协程上下文,并返回结果
suspend fun fetchData() = withContext(Dispatchers.IO) {
// 在 IO 线程执行
"Data"
}
actor(已废弃)
-
早期版本用于构建 actor 模型,现已废弃,推荐使用
Channel替代
| 场景 | 推荐构建器 |
|---|---|
| 不需要返回值 | launch |
| 需要返回值 | async / await |
| 切换线程 | withContext |
| 顶层协程启动 | runBlocking(非生产环境) |
| 结构化并发 | coroutineScope / supervisorScope |
| 流式数据处理 | produce + consumeEach |
这些构建器共同支撑了 Kotlin 协程的结构化并发模型,确保协程的生命周期被正确管理。开发中可以根据不同场景选择合适的构建器。
更多推荐



所有评论(0)