Почему DispatchQueue.sync приводит к deadlock?



Для начала разберемся кто это вообще такой ваш мертвый замок. Представим ситуацию в ресторане. Повар спрашивает повара официанта какой суп готовить, а официант отвечает, что скажет, только когда приготовишь суп.



Код выше обязательно придет к сбою. Очередь выполняет код синхронно. Второй клоужер не может запуститься, пока первый не закончится. Первый же клоужер не может выполниться, пока второй не запустится.