朧の.Netの足跡
問合せ先:support@oborodukiyo.info サイト内検索はこちら 
Swift 非同期スレッドで後処理をしたい時の簡単な方法





非同期スレッドを複数動かした時にそれぞれのスレッドで何かしらの後処理をしたい時の簡単な例を示します。
自分でもこんなことができるんだと驚いたのですが、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()
            }
        }

        








良いやや良い普通やや悪い悪い

投稿日時評価コメント