Kotlin协程中launch/join与async/await的区别
你好!我开始学习Kotlin中的协程,但对两种主要方法感到困惑。当我编写代码时,我发现可以通过`launch`启动协程,然后通过`join()`等待其完成。还有`async`配合`await()`。乍一看它们做的是同一件事——启动后台工作并等待结果。但我感觉它们之间存在差异,而且这种差异很重要。
下面是一个简单的例子,我试图从两个来源加载数据并合并它们。使用launch/join时是这样的:
```kotlin
fun main() = runBlocking {
var data1 = ""
var data2 = ""
val job1 = launch {
delay(1000) // 模拟加载
data1 = "来自API 1的数据"
}
val job2 = launch {
delay(1000)
data2 = "来自API 2的数据"
}
job1.join()
job2.join()
println("$data1 + $data2") // 能工作,但不优雅
}
```
而使用async/await时我是这样做的:
```kotlin
fun main() = runBlocking {
val deferred1 = async {
delay(10