如果当前线程相同,如何传递块

时间:2018-03-22 07:38:14

标签: ios swift multithreading thread-safety dispatch-queue

我写了一个类来处理DispatchQueues。我编写了一个静态方法来调用main线程。我传递一个completionHandler作为参数,当前只是访问主线程并在主线程块内调用此完成处理程序。当多次同时调用此方法时,这会导致挂起,因此我想检查方法是否已被主线程调用,然后我不应该调度队列,而不是只调用完成处理程序但是当我调用它时{{ 1}}它进入其他一些线程但不作为主线程。

这是我的班级

completionHandler

1 个答案:

答案 0 :(得分:1)

您可以通过另一种方式实现目标。首先,您需要在后台线程上发送它,然后在主线程上再次发送。

class ETQueue: NSObject {
    static func main(completion: @escaping()->()) {
        ETQueue.background {
            DispatchQueue.main.sync {
                completion()
            }
        }
    }
    static func main(_ deley: Double, completion: @escaping()->()) {
        ETQueue.background {
            DispatchQueue.main.asyncAfter(deadline: .now() + deley) {
                completion()
            }
        }
    }
    static func background(completion: @escaping()->()) {
        DispatchQueue.global(qos: .background).async {
            completion()
        }
    }
}