Submits a block object for execution and returns after that block finishes executing.


void dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);



The queue on which to submit the block. This parameter cannot be NULL.


The block containing the work to perform. This block has no return value and no parameters. This parameter cannot be NULL.


Submits a block to the specified dispatch queue for synchronous execution. Unlike dispatch_async, this function does not return until the block has finished. Calling this function and targeting the current queue results in deadlock.

Unlike with dispatch_async, no retain is performed on the target queue. Because calls to this function are synchronous, it "borrows" the reference of the caller. Moreover, no Block_copy is performed on the block.

As a performance optimization, this function executes blocks on the current thread whenever possible, with one obvious exception. Specifically, blocks submitted to the main dispatch queue always run on the main thread.

See Also

Executing Tasks Synchronously


Submits an application-defined function for synchronous execution on a dispatch queue.