Dee*_*rma 9 async-await swift swift5
我对 WWDC 2021 上宣布的 Swift 5.5 中新的异步/等待模式感到摸不着头脑,似乎涉及到很多学习内容,但并不像想象的那么容易掌握。我刚刚在 WWDC 视频中看到了这个 for 循环:
for await id in staticImageIDsURL.lines {
let thumbnail = await fetchThumbnail(for: id)
collage.add(thumbnail)
}
let result = await collage.draw()
Run Code Online (Sandbox Code Playgroud)
据我了解,for 循环的每次迭代都会挂起for 循环,直到 fetchThumbnail() 完成运行(可能在不同的线程上)。我的问题:
for循环行中await id的目的是什么?如果我们将 for 循环写成如下而不带 wait 会怎么样?
for id in staticImageIDsURL.lines {
}
Run Code Online (Sandbox Code Playgroud)
上面的for 循环是否始终确保图像以顺序方式添加到拼贴画中,而不是根据提前获取的缩略图以随机顺序添加到拼贴画中?因为在编写代码的经典完成处理程序方式中,确保数组中的顺序需要对代码进行更多逻辑。
从await id获取元素的方法本身就是一个异步操作。idstaticImageIDsURL.lines
for await id in staticImageIDsURL.lines
Run Code Online (Sandbox Code Playgroud)
该操作必须在我们进入该迭代的 for 循环体之前完成。您应该阅读AsyncSequence文档以了解更多信息,或者可以观看Meet AsyncSequence WWDC 2021会议。
对于每次迭代,当您这样说时,您正在等待当前操作完成。
let thumbnail = await fetchThumbnail(for: id)
Run Code Online (Sandbox Code Playgroud)
每次启动新的提取调用时,此行都会挂起该函数,因此保证这些缩略图调用按顺序完成。这些调用永远不会并行发生,第一个调用必须在第二个调用启动之前完成。
| 归档时间: |
|
| 查看次数: |
10709 次 |
| 最近记录: |