GCD to perform task in main thread

I have a callback which might come from any thread. When I get this callback, then I would like to perform a certain task on the main thread.

Do I need to check whether I already am on the main thread - or is there any penalty by not performing this check before calling the code below?

dispatch_async(dispatch_get_main_queue(), ^{
   // do work here


  • No, you do not need to check whether you’re already on the main thread. By dispatching the block to the main queue, you’re just scheduling the block to be executed serially on the main thread, which happens when the corresponding run loop is run.

    If you already are on the main thread, the behaviour is the same: the block is scheduled, and executed when the run loop of the main thread is run.