如何并行使用 Swift async/await
Posted
技术标签:
【中文标题】如何并行使用 Swift async/await【英文标题】:How to use Swift async/await in parallel 【发布时间】:2021-10-08 07:04:34 【问题描述】:考虑下面的代码:
class UserProfile
private var img: UIImage?
didSet /* update ui */
private var bio: String?
didSet /* update ui */
private func loadImage() async -> UIImage?
// ...
private func loadBio() async -> String?
// ...
public func loadData() async
async let img = loadImage()
async let bio = loadBio()
self.img = await img
self.bio = await bio
虽然这确实并行运行加载例程,但分配结果是同步的:self.bio
将始终在 self.img
之后分配。这意味着 bio 的 UI 将不得不等待图像被加载。我希望这些彼此分离。完成处理程序在这里是理想的,但我们使用的是异步 API。我怎样才能让作业按完成的顺序进行?
【问题讨论】:
【参考方案1】:你可以试试这样的:
func loadData() async
await withTaskGroup(of: Void.self) group in
group.addTask self.img = await loadImage()
group.addTask self.bio = await loadBio()
【讨论】:
【参考方案2】:我相信使用元组可以解决这个问题:
(self.img, self.bio) = await (img, bio)
【讨论】:
以上是关于如何并行使用 Swift async/await的主要内容,如果未能解决你的问题,请参考以下文章