I have been using `DispatchQueue.main.async` for a long time to perform UI related operations.  

Swift provides both `DispatchQueue.main.async` and `DispatchQueue.main.sync`, and both are performed on the main queue.  

Can anyone tell me the difference between them?   When should I use each?  

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

}

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

```