How to dispatch on main queue synchronously without a deadlock?
I need to dispatch a block on the main queue, synchronously. I don’t know if I’m currently running on the main thread or no. The naive solution looks like this: dispatch_sync(dispatch_get_main_queue(), block); But if I’m currently inside of a block running on the main queue, this call creates a deadlock. (The synchronous dispatch waits for the block to finish, but the block does not even start running, since we are waiting for the current one to finish.) The obvious next step is to check for the current queue: if (dispatch_get_current_queue() == dispatch_get_main_queue()) { block(); } else {