串行 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
}
在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
}