【问题标题】:Problem with creating a Serial queue in Swift using GCD使用 GCD 在 Swift 中创建串行队列的问题
【发布时间】:2019-01-21 13:00:38
【问题描述】:

我实现了像 Bellow 一样的串行队列

var serialQueue = DispatchQueue(label: "com.serial.queue")

并像这样使用

serialQueue.sync(execute: {
            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2.0) {
                print("First Task")

            }
        })



serialQueue.sync(execute: {
                DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1.0) {
                      print("Second Task")
                  }
            })

预期:第一个任务,第二个任务

但它会打印:第二个任务,第一个任务

【问题讨论】:

    标签: swift swift3


    【解决方案1】:

    这是因为在DispatchQueue.main.asyncAfter 中调用您延迟打印“第二个任务”一秒和打印“第一个任务”2 秒。 所以 1 秒后你会得到“第二个任务”,再过 1 秒后你会得到“第一个任务”。

    您可以直接在 serialQueue 中调用 print,或者如果您需要在主线程中执行此操作,只需消除延迟即可。

    【讨论】:

      【解决方案2】:

      试试这个

      var time = DispatchTime.now() + 0.2
      
      serialQueue.sync(execute: {
              DispatchQueue.main.asyncAfter(deadline: time) {
                  print("First Task")
              }
          })
      
      
      time = time + 0.1
      
      serialQueue.sync(execute: {
                  DispatchQueue.main.asyncAfter(deadline: time) {
                        print("Second Task")
                    }
              })
      

      【讨论】:

        猜你喜欢
        • 2021-09-28
        • 2012-12-17
        • 2013-10-11
        • 2022-08-23
        • 2016-06-04
        • 1970-01-01
        • 2014-04-28
        • 2013-03-15
        • 1970-01-01
        相关资源
        最近更新 更多