zoukankan      html  css  js  c++  java
  • 多线程: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
  • 相关阅读:
    JPA各种类型映射处理
    HTML URL编码
    C# 温故而知新:Stream篇(二)
    数据集
    C#可调用API接口来获取窗口句柄,代码如下:
    C# 温故而知新:Stream篇(三)
    SQL的主键和外键约束
    C# 温故而知新: 线程篇(三)
    C# 温故而知新:Stream篇(四)
    C# 温故而知新:Stream篇(—)
  • 原文地址:https://www.cnblogs.com/EchoHG/p/7684764.html
Copyright © 2011-2022 走看看