使用GCD的Swift同步请求

使用GCD的Swift同步请求,swift,asynchronous,grand-central-dispatch,Swift,Asynchronous,Grand Central Dispatch,尝试使用DispatchGroup()发出少量请求时出错: 不允许从后台线程发布更改;确保在模型更新时从主线程(通过诸如receive(on:)之类的操作符)发布值 我的代码示例: DispatchQueue.global().async { let dispatchGroup = DispatchGroup() dispatchGroup.enter() if uploadQueue.contains(.requestA){

尝试使用DispatchGroup()发出少量请求时出错:

不允许从后台线程发布更改;确保在模型更新时从主线程(通过诸如receive(on:)之类的操作符)发布值

我的代码示例:

DispatchQueue.global().async {
        let dispatchGroup = DispatchGroup()

        dispatchGroup.enter()

        if uploadQueue.contains(.requestA){
            makeUpload(type: . requestA, file: data, completion: {
                dispatchGroup.leave()
            })
        }
 
        dispatchGroup.wait()

        dispatchGroup.enter()

        if uploadQueue.contains(.requestB){
            makeUpload(type: . requestB, file: data, completion: {
                dispatchGroup.leave()
            })
        }
        dispatchGroup.wait()

        dispatchGroup.enter()

        if uploadQueue.contains(.requestC){
            makeUpload(type: . requestC, file: data, completion: {
                dispatchGroup.leave()
            })
        }
        dispatchGroup.wait()
    }

我不知道您的代码的其余部分,但我感谢主队列中应该调用
makeUpload
。如果您是通过combine发布的,您可能只想创建一个适当的上载发布服务器(例如,可能以DownloadTaskPublisher示例为模式)。使用dispatch group使异步进程同步运行,在进程中占用一个工作线程,这可能不是一个好模式。此外,您是100%确定要按顺序上传这些文件(在上传过程中会付出巨大的性能代价),还是只想确保并发性受到约束?