使用DispatchQueue.main.sync时应用程序崩溃

时间:2018-11-17 14:20:59

标签: swift grand-central-dispatch nsoperationqueue

我正在使用Grand Central Dispatch进行实验,并且遇到了同步任务崩溃的情况。

func viewDidLoad() {
    super.viewDidLoad()

    self.testHello()
    print("Task2")
}

func testHello() {
    DispatchQueue.main.sync {
        print("Task1")
    }
}

执行上述给定功能后,我将面临崩溃。

对于上述崩溃的解释将不胜感激。

1 个答案:

答案 0 :(得分:3)

摘自DispatchQueue.sync文档:

  

...此功能直到块完成后才返回。调用此函数并定位当前队列会导致死锁。

您已经在主队列中,并且正在强制在主队列上同步执行代码。您位于主队列中的事实意味着目前无法在该队列上执行其他任何代码,但是sync等到该代码被执行后,因此您将死锁队列和整个应用程序。