一尘不染

DispatchQueue.main.async和DispatchQueue.main.sync之间的区别

swift

我已经使用DispatchQueue.main.async了很长时间来执行与UI相关的操作。

Swift同时提供DispatchQueue.main.asyncDispatchQueue.main.sync,并且两者都在主队列上执行。

谁能告诉我他们之间的区别?我什么时候应该使用?

DispatchQueue.main.async {
    self.imageView.image = imageView
    self.lbltitle.text = ""

}

DispatchQueue.main.sync {
    self.imageView.image = imageView
    self.lbltitle.text = ""
}

阅读 2171

收藏
2020-07-07

共1个答案

一尘不染

当您使用async它时,可以使调用队列继续前进,而不必等到执行分派的块。相反,sync将使调用队列停止并等待,直到您在块中分派的工作完成为止。因此sync容易导致死锁。尝试DispatchQueue.main.sync从主队列中运行,该应用将冻结,因为调用队列将一直等待,直到分派的块结束,但它甚至无法启动(因为该队列已停止并正在等待)

什么时候使用sync?当您需要等待在不同队列上完成的事情然后才继续在当前队列上工作时

使用同步的示例:

在串行队列上,可以将其sync用作互斥体,以确保只有一个线程能够同时执行受保护的代码段。

2020-07-07