在不支持并发swiftiosXcodeasync/await的函数中调用“异步”

我正在尝试在 Swift 5.5 中使用 async/await。我有我的异步函数,但是每当我尝试调用它时,我都会收到此错误:

不支持并发的函数中的“异步”调用

这是代码示例:

class TryThis {
    func getSomethingLater(_ number: Double) async -> String {
        // test - sleep for 3 seconds, then return
        Thread.sleep(forTimeInterval: 3)
        return String(format: ">>>%8.2f<<<", number)
    }
}

let tryThis = TryThis()

let result = await tryThis.getSomethingLater(3.141592653589793238462)
print("result: (result)")

这个有什么解决办法??

回答

这里的答案是必须从异步上下文调用“await getSomethingLater”。从字面上看,这意味着改变这一点:

let result = await tryThis.getSomethingLater(3.141592653589793238462)
print("result: (result)")

进入这个:

Task {
    let result = await tryThis.getSomethingLater(3.141592653589793238462)
    print("result: (result)")
}

所以整个事情变成了:

class TryThis {
    func getSomethingLater(_ number: Double) async -> String {
        // test - sleep for 3 seconds, then return
        Thread.sleep(forTimeInterval: 3)
        return String(format: ">>>%8.2f<<<", number)
    }
}

let tryThis = TryThis()

Task {
    let result = await tryThis.getSomethingLater(3.141592653589793238462)
    print("result: (result)")
}

这是输出:

结果:>>> 3.14<<<

来自 WWDC21的Meet 同步/等待 Swift视频中有很好的信息。


以上是在不支持并发swiftiosXcodeasync/await的函数中调用“异步”的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>