Swift多线程开发 - 8. Operation依赖

Dependency可以实现

  • Operation等待先决条件达到再运行
  • Operation从其它Opration拿到值
    而且Operation的多任务依赖会比GCD的代码更简洁明了,以及避免循环引用的问题

添加依赖

给线程添加依赖非常得方便,只要设置Operationdependent属性即可
假设要从网上下载一张图并且揭秘然后添加滤镜

let networkOp = NetworkOperation()
let decryptOp = DecryptOperation()
let filterOp = FilterOperation()

decryptOp.addDependency(op: networkOp)
filterOp.addDependency(op: decryptOp)

如果要移除依赖的话

filterOp.removeDependency(op: decryptOp)

查看某个线程有哪些依赖

filterOp.dependencies

小心死锁

如果Operation之间互相依赖,比如队列A中的Operation1依赖Operation2, 而Operation2依赖Operation3Operation3依赖Operation1, 这就会陷入互相等待的死锁。

Operation之间传值

比如要把在networkOp下载的图片传给decyptOp,那么在设置好依赖之后

decryptOp.addDependency(op: networkOp)

networkOp就会等decryptOp运行完成之后才开始运行了
所以只要在decryptOpmain中通过dependencies访问networkOp即可。

override func main() {

    let networkOp = dependencies.first as! newworkOp
    newworkOp.downloadedImage

}



作者博客地址

系列文章链接

  • Swift多线程开发 - 1. 概述
  • Swift多线程开发 - 2. GCD 队列和线程
  • Swift多线程开发 - 3. DispatchGroup和Semaphore
  • Swift多线程开发 - 4. 多线程开发的问题
  • Swift多线程开发 - 5. Operations
  • Swift多线程开发 - 6. Operation 队列
  • Swift多线程开发 - 7. Operation 异步队列
  • Swift多线程开发 - 8. Operation依赖
  • Swift多线程开发 - 9. 取消Operation
  • Swift多线程开发 - 10. Thread Sanitizer

你可能感兴趣的:(Swift多线程开发 - 8. Operation依赖)