【发布时间】:2020-12-08 10:34:35
【问题描述】:
我正在尝试使用协程实现一种微不足道的用例:发送并行请求,然后等到所有请求返回并将结果合并到一个列表中。我使用如下逻辑,但不知何故,它不会等待所有响应,而是在第一个响应完成后完成(转到 flatten())。我做错了什么?
fun run() {
GlobalScope.launch {
running = true
results =
providers
.map { provider -> async { provider.retrieve() } }
.map { retrieval ->
try {
withTimeout(2000L) {
retrieval.await()
}
} catch (ex: CancellationException) {
arrayListOf<Pair<String, String>>()
}
}
.flatten()
running = false
notifyObservers()
}
}
【问题讨论】: