2017-07-11 61 views
-1

據我所知,在併發隊列中,以前的任務不會阻塞後面任務的執行。那麼如何才能打印出「hello」,但下面的代碼中沒有打印出單個「世界」?Swift GCD:併發隊列不工作?

override func viewDidLoad() { 

    super.viewDidLoad() 

    let concurrentQueue = DispatchQueue(label: "test", attributes: .concurrent) 

    concurrentQueue.async { 

     while true{ 
      print("hello") 
      sleep(1) 
     } 

     while true{ 
      print("world") 
      sleep(1) 
     } 

    } 

} 
+0

你在寫任務(複數),但你的代碼只包含一個** **任務。 – vadian

回答

0

因爲您只將一個工作項目給予要執行的隊列。它永遠循環打印「你好」,然後永遠循環打印「世界」。顯然,它永遠不會打印「世界」。

如果你想這兩個行動同時發生,那麼你就需要提交到不同的工作項目:

let concurrentQueue = DispatchQueue(label: "test", attributes: .concurrent) 

concurrentQueue.async { 
    while true { 
     print("hello") 
     sleep(1) 
    } 
} 

concurrentQueue.async { 
    while true { 
     print("world") 
     sleep(1) 
    } 
}