• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Harley
博客园    首页    新随笔    联系   管理    订阅  订阅

多线程: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 }
View Code

 

posted @ 2017-10-18 00:15  Harely  阅读(349)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3