dispatch_sync вызов в вызов dispatch_async

У меня возникают некоторые сомнения относительно поведения этого кода:

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

7
задан MatterGoal 29 December 2011 в 14:27
поделиться