В документах Apple говорится:
Важно: никогда не следует вызывать dispatch_sync или dispatch_sync_f функция из задачи, выполняемой в той же очереди, в которой вы находитесь планируя перейти к функции. Это особенно важно для последовательные очереди, которые гарантированно заторможены, но также должны быть избегать параллельных очередей.
Как вы пишете код, чтобы сделать именно это?