首页 > 解决方案 > 在不支持并发的函数中调用'async' swift ios Xcode async/await

问题描述

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

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

这是代码示例:

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)")

这个有什么解决办法??

标签: iosswiftxcodemacosasync-await

解决方案


这里的答案是“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 sync/await in Swift视频中有很好的信息。


推荐阅读