2015-06-18 4 views
0

я пытаюсь выполнить 2 задачи в backgroup в последовательности с помощью следующего кода:асинхронной очереди задач не работает (СВИФТ)

var group = dispatch_group_create(); 
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { 
      println("start task 1"); 
      NSThread.sleepForTimeInterval(10000); 
      }); 
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), { 
      println("start task 2"); 
      NSThread.sleepForTimeInterval(10000); 
     }); 


dispatch_group_wait(group, DISPATCH_TIME_FOREVER); 

При выполнении задачи 1 и задачи 2 выполняются в то же время, не inqequence.

Что я делаю неправильно?

ответ

0

Поскольку глобальная очередь CONCURRENT очереди, если вы хотите задачу выполнить в порядке, создать серийную очередь нужно

let serialQueue = dispatch_queue_create("com.test.helloHwc",DISPATCH_QUEUE_SERIAL) 
dispatch_group_async(group,serialQueue, { 
    println("start task 1"); 
    NSThread.sleepForTimeInterval(10); 
}); 
dispatch_group_async(group,serialQueue, { 
    println("start task 2"); 
    NSThread.sleepForTimeInterval(10); 
}); 


dispatch_group_wait(group, DISPATCH_TIME_FOREVER); 

Обновление с документом

блоки представлены в последовательную очередь выполняется по одному в порядке FIFO. Однако обратите внимание, что блоки, отправленные в независимые очереди, могут выполняться одновременно друг с другом. Блоки, отправленные в параллельную очередь, удаляются в порядке FIFO, но могут выполняться одновременно, если доступны ресурсы для этого

Смежные вопросы