I have 3 examples of code:
1: self.perform(#selector(self.endRefreshing), with: nil, afterDelay: 0)
2: self.perform(#selector(self.endRefreshing))
3: DispatchQueue.main.asyncAfter(deadline: .now()) { self.endRefreshing() }
What is the difference in their execution if everything happens in the main thread?