【发布时间】:2021-11-02 00:03:52
【问题描述】:
我正在尝试通过多步异步调用获取详细的项目列表。首先,我获取一个标识符列表,然后获取每个标识符的详细信息。
func fetchList() async -> [UUID] {
// some async network call here
await Task.sleep(2)
return [UUID(), UUID(), UUID()]
}
func fetchDetail(forUUID uuid: UUID) async -> String {
// some async network call here
await Task.sleep(1)
return "\(uuid.uuidString.reversed())"
}
这些功能单独工作正常,但当我想尝试使用列表中的.map 时,我被卡住了。
Task {
let list = await fetchList()
let details = await list.map { fetchDetail(forUUID: $0) } // Does not work
}
我确实发现了 withTaskGroup 函数,当然我可以异步追加到一组项目,但我想知道是否有更好的方法来实现此功能。
【问题讨论】:
-
如果第一个方法真的返回一个简单的数组,那么它是异步的这一事实几乎是无关紧要的;这些是您唯一的选择:您可以一次或同时处理一个列表项。但是既然你说你知道任务组,并且由于任务组正是如何同时处理列表的所有成员,所以很难看出问题是什么。
标签: ios swift async-await concurrency