【发布时间】:2021-09-09 22:35:39
【问题描述】:
我对 WWDC 2021 中宣布的 Swift 5.5 中的新 async/await 模式摸不着头脑,这似乎涉及很多学习内容,而且不像假装的那样容易掌握。我刚刚在 WWDC 视频中看到了这个 for 循环:
for await id in staticImageIDsURL.lines {
let thumbnail = await fetchThumbnail(for: id)
collage.add(thumbnail)
}
let result = await collage.draw()
据我了解,for 循环 的每次迭代都会暂停 for 循环,直到 fetchThumbnail() 完成运行(可能在不同的线程上)。我的问题:
-
for 循环 行中await id 的目的是什么?如果我们在没有等待的情况下将 for 循环写成如下呢?
for id in staticImageIDsURL.lines { } -
上面的 for 循环 是否始终确保图像按顺序添加到 collage 中,而不是根据早期获取的缩略图以随机顺序添加?因为在编写代码的经典完成处理程序方式中,确保数组中的顺序需要更多的代码逻辑。
【问题讨论】:
-
关于您的第一个问题,
lines返回一个AsyncSequence,因此您不能使用同步的for循环对其进行迭代。 -
+1 表示:“假装是这样”。完全同意。在完全发布之前,它应该被简化很多。
标签: swift async-await swift5.5