Avatar ·

Kotlin: withContext() 对比 async-await — 区别是什么以及如何选择?

大家好,同事们!我最近开始学习 Kotlin 中的协程,遇到了 `withContext()` 和 `async-await` 结构之间的混淆。乍一看,两者都允许在另一个 context(例如 `Dispatchers.IO`)中执行代码并获取结果。但我不明白何时该用哪个。 这里有一个简单的例子。假设我需要从网络加载数据并处理它: ```kotlin suspend fun loadUser(): User { return withContext(Dispatchers.IO) { // 模拟网络请求 delay(1000) User("阿列克谢") } } suspend fun loadUserAsync(): User { val deferred = GlobalScope.async(Dispatchers.IO) { delay(1000) User("阿列克谢") } return deferred.await() } ``` 两个函数做的是同一件事——一秒钟后返回 User。但我听说 `async-await` 常用于并行任务,而 `withContext` 用于切换 dispatcher。然而在简单的顺序调用中,我看不出区别。 另外我还注意到