【问题标题】:Completion handler in serial Grand Central Dispatch串行 Grand Central Dispatch 中的完成处理程序
【发布时间】:2018-05-14 08:59:30
【问题描述】:

serialQueue 完成下载任务后,我想返回所有下载的对象。我想跟踪串行队列何时完成其任务。那么,是否有任何串行 GCD 中的完成处理程序?或者,我是否必须为此使用 NSOperationQueue

 func serialGCD(links: [String]) -> [String] {
    let data: [String] = []
    let serialQueue = DispatchQueue(label: "com.self.serialGCD")
    links.forEach { (x) in
        serialQueue.async {
            //data task
            //data.append(downloadedData)
        }
    }
    return data
}

【问题讨论】:

    标签: swift grand-central-dispatch nsoperationqueue


    【解决方案1】:

    您可以在此处使用 DispatchGroup 来实现类似完成的行为。您可以使用 DispatchGroup 提交多个任务并跟踪它们何时全部完成,即使它们可能在不同的队列上运行。

    func serialGCD(links: [String]) -> [String] {
        let data: [String] = []
        let serialQueue = DispatchQueue(label: "com.self.serialGCD")
    
        let group = DispatchGroup()
    
        links.forEach { (x) in
            group.enter()
    
            serialQueue.async {
                //data task
                //data.append(downloadedData)
    
                group.leave()
            }
        }
    
        group.notify(queue: .main) {
            //Completion block
        }
    
        return data
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 2011-07-28
      • 2023-03-25
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      相关资源
      最近更新 更多