2016-11-18 12 views
2

Я путать с DispatchQueue и DispatchSemaphore.Like следующий пример:[площадка] Отношения bettwen DispatchQueue и DispatchSemaphore

let semaphore : DispatchSemaphore = DispatchSemaphore(value:1) 
for i in 1...40 { 
    DispatchQueue.global().async{ 
     semaphore.wait() 
     NSLog("......1-%d",i) 
     semaphore.signal() 
    } 
} 

Я думаю, он должен напечатать 1 ... 40, на самом деле, он только печатает около 25 , результат выглядит следующим образом:

2016-11-18 19:05:38.786 MyPlayground[7436:495171] ......1-1 
2016-11-18 19:05:38.787 MyPlayground[7436:495175] ......1-2 
...... 
2016-11-18 19:05:38.797 MyPlayground[7436:495258] ......1-23 
2016-11-18 19:05:38.797 MyPlayground[7436:495244] ......1-24 

Кто знает причину?

Благодаря

ответ

2

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

import PlaygroundSupport 
PlaygroundPage.current.needsIndefiniteExecution = true