串行 Grand Central Dispatch 中的完成处理程序

Completion handler in serial Grand Central Dispatch

serialQueue完成下载任务后,我想return所有下载的对象。我想跟踪串行队列何时完成其任务。那么,Serial 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
}

您可以在此处使用 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
}