2017-05-10 12 views
0

私はこのように書きコードがありますので、正確に機能スレッドまたはスレッドの数複数の同時スレッドが完了したことを確認する方法は?

myArray.forEach { item in 
    concurentOperation(item) 
} 

すべての項目の配列では異なるスレッドで実行される同時操作機能、を通過、私はわからないんだけど第三者の図書館のものであり、私の管理下にありません。一度すべての操作が完了したら、調べる方法が必要です。

どうすればいいですか? concurentOperationを変更することなく

+0

受け入れた回答とすべてのディスカッションをもう一度ご覧ください。私は説明しようとしました、なぜ自分の "答え"で動かないのですか? – user3441734

答えて

0

()この利用可能ではありません、申し訳ありません...

UPDATEユーザーのための@Scriptable

彼のソリューションが動作しない理由を次のスニペットは

...、実証
import PlaygroundSupport 
import Dispatch 

PlaygroundPage.current.needsIndefiniteExecution = true 

let pq = DispatchQueue(label: "print", qos: .background) 
func dprint(_ items: Any...) { 
    pq.async { 
     let r = items.map{ String(describing: $0) }.joined(separator: " ") 
     print(r) 
    } 
} 

func concurrentOperation<T>(item: T) { // dummy items 
    DispatchQueue.global().async { 
     // long time operation 
     for i in 0..<10000 { 
      _ = sin(Double(i)) 
     } 
     dprint(item, "done") 
    } 
} 



let myArray = [1,2,3,4,5,6,7,8,9,0] 
let g = DispatchGroup() 
myArray.forEach { (item) in 
    DispatchQueue.global().async(group: g) { 
     concurrentOperation(item: item) 
    } 
} 
g.notify(queue: DispatchQueue.main) { 
    dprint("all jobs done???") 
} 

UPDATE 2

witho ConcurrentOperation()のコードを変更します。

DispatchQueue.global().async(group: g) { 
      concurrentOperation(item: item) 
     } 

並行操作が非同期関数であるため、ディスパッチグループに入ります。それが同期的であれば質問に意味がない。

+0

してください、親愛なるdownvoter、コメントで説明し、事前に感謝します。 – user3441734

+0

答えは非常に短く、なぜconcurentOperationがユーザーを助けるために修正や提案を必要としているのかを説明していません – Scriptable

+0

@Scriptableでした。 – user3441734

関連する問題