作者:I-1ove-Y0u | 来源:互联网 | 2023-10-12 16:43
WWDC21 引入了带有async/await 的Swift 5.5。在探索 Swift 中的结构化并发和在 Swift WWDC21 会话中遇到 async/await 之后,我正在尝试使用async let函数。
这是我的游乐场代码:
func doIt() async -> String {
let t = TimeInterval.random(in: 0.25 ... 2.0)
Thread.sleep(forTimeInterval: t)
return String("(Double.random(in: 0...1000))")
}
async {
async let a = doIt()
async let b = doIt()
async let c = doIt()
async let d = doIt() let results = await [a, b, c, d]
for result in results {
print(" (result)")
}
}
但是,对于每个“async let”行,我都会收到此错误:
error: AsyncLetSwift55WWDC21.playground:12:15: error: expression is 'async' but is not marked with 'await'
async let a = doIt()
^
await
Paul Hudson 的博客展示了这个例子:
探索结构化货币视频在 8:10 左右有这个例子:
编辑:这似乎是 Playground 特定的问题。根据Apple Developer Forums 中关于同一问题的建议,运行相同的代码(好吧,我确实sleep(10)
在 macOS 的异步块之后添加到源文件的末尾,因此应用程序不会在异步调用完成之前终止)作为macOS 命令行项目不会出错并产生正确的输出。
这是一个错误,还是我只是不明白什么?