你的位置:首页 > 软件开发 > 操作系统 > 多线程:Operation(二)

多线程:Operation(二)

发布时间:2017-10-18 01:00:09
1. Operation 设置依赖关系先看看如何设置operation的依赖关系。啥叫依赖关系?有啥用啊?打个比方咱们要做一个听音乐的付费App项目,需要经过登陆、付费、下载、播放四个步骤。其实一看就明白,这四个操作是有先后顺序的,但假如所有的操作都是多线程,咱们怎么控制顺序?通 ...

1. Operation 设置依赖关系

先看看如何设置operation的依赖关系。

啥叫依赖关系?有啥用啊?
打个比方咱们要做一个听音乐的付费App项目,需要经过登陆、付费、下载、播放四个步骤。其实一看就明白,这四个操作是有先后顺序的,但假如所有的操作都是多线程,咱们怎么控制顺序?
通过设置“优先级”?NO!优先级没有办法干这个事情。(相当于操作系统中的同步)

 

我们可以通过设置依赖关系,建立起先后的顺序。只有当一个 operation 所依赖的所有 operation 都执行完成时,这个 operation 才能开始执行。

并且,operation是可以跨队列建立依赖关系的噢!

 

需要小小注意的是,要先将operation的依赖关系建立好之后再添加到队列中。

 

代码很简单,请看:

多线程:Operation(二)多线程:Operation(二)
 1 fileprivate func startDepencyDemo() { 2 operationQueue.maxConcurrentOperationCount = 4 3  self.activityIndicator.startAnimating() 4  guard let url = URL(string: "https://placebeard.it/355/140") else {return } 5  let op1 = convenienceOperation(setImageView: imageView1, withURL: url) 6  let op2 = convenienceOperation(setImageView: imageView2, withURL: url) 7  op2.addDependency(op1) 8  let op3 = convenienceOperation(setImageView: imageView3, withURL: url) 9  op3.addDependency(op2)10  let op4 = convenienceOperation(setImageView: imageView4, withURL: url)11  op4.addDependency(op3)12  13  DispatchQueue.global().async {14   [weak self] in15   self?.operationQueue.addOperations([op1,op2,op3,op4], waitUntilFinished: true)16   DispatchQueue.main.async {17    self?.activityIndicator.stopAnimating()18   }19  }20 21 }
View Code

 

原标题:多线程:Operation(二)

关键词:线程

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。