当前位置:   article > 正文

[Swift 开发] GCD常用方法_swift queue.async(flags: .barrier)

swift queue.async(flags: .barrier)

GCD常用的用法

子线程

  1. DispatchQueue.global().async {
  2. print("开一条全局队列异步执行任务")
  3. }

主线程

  1. DispatchQueue.main.async {
  2. print("在主队列执行任务")
  3. }


wait

  1. var myQueue = DispatchQueue(label: "第一条线程")
  2. var myQueue2 = DispatchQueue(label: "第二条线程")
  3. let group = DispatchGroup()
  4. myQueue.async(group: group, qos: .default, flags: []) {
  5. for _ in 0...10 {
  6. print("耗时任务一")
  7. }
  8. }
  9. myQueue.async(group: group, qos: .default, flags: []) {
  10. for _ in 0...10 {
  11. print("耗时任务二")
  12. sleep(UInt32(3))
  13. }
  14. }
  15. //等待上面任务执行,会阻塞当前线程,超时就执行下面的,上面的继续执行。可以无限等待 .distantFuture
  16. let result = group.wait(timeout: .now() + 2.0)
  17. switch result {
  18. case .success:
  19. print("不超时, 上面的两个任务都执行完")
  20. case .timedOut:
  21. print("超时了, 上面的任务还没执行完执行这了")
  22. }
  23. print("接下来的操作")

notify

  1. let group = DispatchGroup()
  2. myQueue?.async(group: group, qos: .default, flags: [], execute: {
  3. for _ in 0...10 {
  4. print("耗时任务一")
  5. }
  6. })
  7. myQueue?.async(group: group, qos: .default, flags: [], execute: {
  8. for _ in 0...10 {
  9. print("耗时任务二")
  10. }
  11. })
  12. //执行完上面的两个耗时操作, 回到myQueue队列中执行下一步的任务
  13. group.notify(queue: myQueue!) {
  14. print("回到该队列中执行")
  15. }

barrier

  1. myQueue?.async {//任务一
  2. for _ in 0...10 {
  3. print("......")
  4. }
  5. }
  6. myQueue?.async {//任务二
  7. for _ in 0...10 {
  8. print("++++++");
  9. }
  10. }
  11. // barrier 会等待上面执行完毕再执行下面的,会阻塞当前线程
  12. // myQueue?.async(flags:.barrier ,execute: {//1.
  13. // print("000000")
  14. // })
  15. myQueue?.async(group: nil, qos: .default, flags: .barrier, execute: {//2.
  16. print("000000")
  17. })
  18. myQueue?.async {
  19. print("111111")
  20. }


声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号