DispatchGroup多任务合并
2017-09-30 本文已影响55人
lotawei
多个任务无顺序依赖的异步任务
let group = DispatchGroup()
for i in 0 ..< tasks.count {
group.enter()
tasks[i].starttask({ (girls) in
self.girls += girls
group.leave()
})
}
group.notify(queue: DispatchQueue.main, execute: {
self.tableview.reloadData()
})
多个任务具有优先级的任务 b请求必须在A请之后
class CustomOperation:Operation{
var taskid:Int!
override init() {
}
convenience init(_ taskid:Int) {
self.init()
self.taskid = taskid
}
override func main() {
let url = "http://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/" + String.init(format: "%d", self.taskid)
var girls:[Girl] = [Girl]()
Alamofire.request(url).responseJSON { (response) in
let results = JSON.init(response.result.value as! [String:Any])
for json in results["results"].array!{
let girl = Girl.init(fromJson: json)
girls.append(girl)
}
operagirls += girls
NotificationCenter.default.post(Notification.init(name: Notification.Name(rawValue: "opupdate")))
}
} }
####### 用法设置依赖
let aquen = OperationQueue()
let customop1 = CustomOperation.init(1)
let customop2 = CustomOperation.init(2)
customop1.addDependency(customop2)
aquen.addOperation(customop1) // add后会自动执行main方法
aquen.addOperation(customop2)
涉及到多个网络请求依赖的情况可以采用这种,当然也可以直接在alamofire中使用得到结果后接着请求但是貌似不太好,一直这样用也没产生什么问题毕竟可阅读性太差