async/await 并发
async 并发执行、await 等待结果、结构化并发、异常处理
async/await 并发
async 并发执行多个协程,await 等待结果——类似 JS 但更安全。
学完本章你将: 掌握 async 并发、await 结果、结构化并发。
基本用法
kotlin
suspend fun fetchUser(id: Int): String {
delay(1000)
return "User $id"
}
fun main() = runBlocking {
val user1 = async { fetchUser(1) }
val user2 = async { fetchUser(2) }
println("${user1.await()} + ${user2.await()}")
// 两个请求并发执行——总耗时 ~1s 而非 2s
}
懒启动
kotlin
val deferred = async(start = CoroutineStart.LAZY) {
fetchUser(1)
}
// 还没开始执行...
val result = deferred.await() // 现在才开始
结构化并发
kotlin
suspend fun loadAll() = coroutineScope { // 作用域
val users = async { fetchUsers() }
val posts = async { fetchPosts() }
// 任一子协程失败——取消所有兄弟协程
Data(users.await(), posts.await())
}
异常处理
kotlin
fun main() = runBlocking {
val handler = CoroutineExceptionHandler { _, e ->
println("捕获异常: ${e.message}")
}
launch(handler) {
throw RuntimeException("出错了")
}
// 不会崩溃——被 handler 捕获
}