Avatar ·

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