ios - DispatchQueue.main.async 和 DispatchQueue.main.sync 的区别

标签 ios swift multithreading swift3 concurrency

我一直在用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 = ""
}

最佳答案

当您使用 async它让调用队列继续前进,而无需等到分派(dispatch)的块被执行。相反sync将使调用队列停止并等待您在块中分派(dispatch)的工作完成。因此 sync容易导致死锁。尝试运行 DispatchQueue.main.sync来自主队列,应用程序将卡住,因为调用队列将等待调度块结束,但它甚至无法启动(因为队列已停止并等待)

何时使用 sync ?当您需要等待在 DIFFERENT 队列上完成某事,然后才继续处理当前队列时

使用同步的示例:

在串行队列上,您可以使用 sync作为互斥锁,以确保只有一个线程能够同时执行 protected 代码段。

关于ios - DispatchQueue.main.async 和 DispatchQueue.main.sync 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44324595/

相关文章:

ios - 动画时捕获屏幕

swift - 什么等同于 Swift 中的 loadNibNamed

swift - sequence() 上的 compactMap 不懒惰?

java - 我们如何停止后端进程?

Java如何在作业完成时调用或通知调用类?

ios - 试飞内部组?

ios - 使用代码更改 UITableViewCell 的样式

ios - 我可以在后台观察来电和去电吗?

json - Swift - 将类型动态传递给 JSONDecoder

swift - DispatchQueue.main.async 和 Dispatch.main.asyncAfter(.now(),{}) 之间的区别