在swift3中实现屏障

时间:2017-04-17 23:09:43

标签: ios multithreading firebase swift3 pthread-barriers

我正在尝试将多个图片上传到firebase存储,并且应用程序需要在上传任务完成后执行某些操作。我做了一些研究,我发现屏障在这种情况下很有用。我跟着tutorial,但似乎我的代码工作不正常。我错过了什么?这是代码:

func uploadImages(completion: (()->Void)){
    // creating a queue
    let uploadImagesQueue = DispatchQueue(label: "upLoadImages", attributes: .concurrent)
    for i in 0..<numOfImages{
        uploadImagesQueue.async{
            // upload each of the images
        }
    }
    uploadImagesQueue.async(flags: .barrier){
        completion()
    }
}

此代码的问题是completion()在所有上传部分完成之前运行。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

也许在uploadImagesQueue.async块中,您异步上传图像(使用uploadTask!?)。然后在提交uploadTask时完成异步块。 不要使用DispatchQueue,只需使用Firebase的uploadTask。