2017-07-11 7 views
-1

私が理解しているように、並行キューでは、以前のタスクは後者のタスクの実行をブロックしません。だから、どうやって "hello"だけが印刷されますが、次のコードでは1つの "world"は印刷されませんか?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

あなたはタスク(複数)について書いているが、あなたのコードが**だけ** 1が含まれています仕事。 – vadian

答えて

0

実行するキューに対して1つの作業項目しか指定していないためです。永遠に "hello"という印字を繰り返し、永遠に "world"を印刷します。明らかに、「世界」を印刷することは決してありません。

あなたはこれらの二つのアクションが同時に発生する場合は、あなたが別の作業項目に提出する必要があります

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

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

concurrentQueue.async { 
    while true { 
     print("world") 
     sleep(1) 
    } 
} 
関連する問題