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中使用得到结果后接着请求但是貌似不太好,一直这样用也没产生什么问题毕竟可阅读性太差

上一篇 下一篇

猜你喜欢

热点阅读