非同期スレッドを複数動かした時にそれぞれのスレッドで何かしらの後処理をしたい時の簡単な例を示します。
自分でもこんなことができるんだと驚いたのですが、DispatchQueue.asyc()で非同期スレッドを作成する時に、非同期スレッドの処理の中に後処理を入れ込んでみたらうまく動きました。
しかもそのあと処理は画面処理なのでメインスレッドで動くよう指示をしましたがきちんと動いています。
何はともあれ試してみてください。
//このループは非同期スレッドを動かしたい数だけのループをさせている。
for i in 0 ..< myList.count {
self.dispatchGroup.enter()
//非同期スレッドの作成
DispatchQueue(label: "my.async").async {
//ここで非同期でのメイン処理をする
//do something
//非同期スレッドの中に後処理でしたいものを入れる。
//ここでは画面描画の処理をしたいのでメインスレッドで動くように指定している。
DispatchQueue.main.sync {
self.didCount += 1
self.progressBar.doubleValue = Double(self.didCount)
self.btnRedraw(self)
self.tableview.reloadData()
}
})
self.dispatchGroup.leave()
}
}
