У меня возникают некоторые сомнения относительно поведения этого кода:
dispatch_async(queue, ^{
sleep(2);
NSLog(@"step1");
dispatch_sync(queue, ^{
sleep(3);
NSLog(@"step 2");
});
NSLog(@"step 3");
});
Из этих строк я ожидал чтобы получить в качестве вывода step1 -> step3 -> step2
, но я получаю только step1
.
Если я изменяю dispatch_sync с помощью dispatch_async, он работает, как ожидалось, создает ли dispatch_sync вызов dispatch_async такого рода проблемы?
Редактировать после ответов ----------------
В этом случае возникает тупик:
Вы можете проверить принятый ответ, чтобы получить объяснение этой ситуации и проверьте эту ссылку для документации http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/dispatch_async.3.html