2016-11-18 78 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