多线程:Operation
Posted EchoHG
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程:Operation相关的知识,希望对你有一定的参考价值。
1. Operation 设置依赖关系
先看看如何设置operation的依赖关系。
啥叫依赖关系?有啥用啊?
打个比方咱们要做一个听音乐的付费App项目,需要经过登陆、付费、下载、播放四个步骤。其实一看就明白,这四个操作是有先后顺序的,但假如所有的操作都是多线程,咱们怎么控制顺序?
通过设置“优先级”?NO!优先级没有办法干这个事情。(相当于操作系统中的同步)
我们可以通过设置依赖关系,建立起先后的顺序。只有当一个 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] in 15 self?.operationQueue.addOperations([op1,op2,op3,op4], waitUntilFinished: true) 16 DispatchQueue.main.async { 17 self?.activityIndicator.stopAnimating() 18 } 19 } 20 21 }
以上是关于多线程:Operation的主要内容,如果未能解决你的问题,请参考以下文章
svn报错cleanup failed–previous operation has not finished; run cleanup if it was interrupted的解决办法(代码片段