2017-11-30 13 views
0

serialQueueがタスクのダウンロードを完了した後、ダウンロードしたオブジェクトをすべて返したいとします。私は、シリアルキューがそのタスクを完了したときを追跡したい。ですから、シリアルGCDに補完ハンドラがあります?または、この目的でNSOperationQueueを使用する必要がありますか?完了ハンドラをシリアルグランドセントラルディスパッチ

func serialGCD(links: [String]) -> [String] { 
    let data: [String] = [] 
    let serialQueue = DispatchQueue(label: "com.self.serialGCD") 
    links.forEach { (x) in 
     serialQueue.async { 
      //data task 
      //data.append(downloadedData) 
     } 
    } 
    return data 
} 

答えて

1

ここでDispatchGroupを使用して、動作のように完了することができます。 DispatchGroupを使用すると、複数のタスクを送信し、完了した時点を別のキューで実行しても追跡できます。

func serialGCD(links: [String]) -> [String] { 
    let data: [String] = [] 
    let serialQueue = DispatchQueue(label: "com.self.serialGCD") 

    let group = DispatchGroup() 

    links.forEach { (x) in 
     group.enter() 

     serialQueue.async { 
      //data task 
      //data.append(downloadedData) 

      group.leave() 
     } 
    } 

    group.notify(queue: .main) { 
     //Completion block 
    } 

    return data 
} 
関連する問題