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。然而在简单的顺序调用中,我看不出区别。
另外我还注意到