Xcode报错:’async’ call in a function that does not support concurrency
Xcode报错:’async’ call in a function that does not support concurrency

Xcode报错:’async’ call in a function that does not support concurrency

在Xcode Playground中尝试调取URLSession.shared.data方法:

if let url = URL(string: "https://jsonplaceholder.typicode.com/todos/1") {
    do {
        // 同步请求数据
        let (data, response) = try URLSession.shared.data(from: url)    // 报错行
        ...
    }
}

发现调取报错,输出内容为:

'async' call in a function that does not support concurrency

经排查问题原因在于:

URLSession.shared.data(from:) 是一个 异步 (async) 方法,在 Swift 中异步方法需要在支持异步的上下文(如 async 函数或 Task 闭包中)调用。因此,调用 URLSession.shared.data(from:) 时,需要将代码包装在一个 async 函数中,或使用 Task。

Task {
    if let url = URL(string: "https://jsonplaceholder.typicode.com/todos/1") {
        do {
            // 同步请求数据
            let (data, response) = try URLSession.shared.data(from: url)    // 报错行
            ...
        }
    }
}

Swift 中,带有 async 标记的函数会在并发环境中运行,以便更高效地处理任务,不会阻塞主线程。因此,await 关键字会在该操作完成后继续执行,但必须在支持异步上下文下调用。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注