web-dev-qa-db-ja.com

Swift 3で同等のdispatch_barrier_async

同僚のコードをリファクタリングし、Swift 3.でdispatch_barrier_asyncに相当するものを探しています。プレイ中のキューはたくさんあり、彼の設計はこのキューのみをブロックすることです、およびこの単一の操作のみ。

// Swift 2.3
func subscribe(subscriber: DaoDelegate) {
  dispatch_barrier_async(self.subscribers.q) { // NOTE: barrier, requires exclusive access for write
    //...
  }
}

// Swift 3 
func subscribe(subscriber: DaoDelegate) {
  (self.subscribers.q).async { // (Not equivalent, no barrier on the concurrent queue)
    //...
  }
}

すべてのキュータイプをリファクタリングせずに、同じ機能をSwift 3で維持できますか?

23
SimplGy

async()メソッドには、.barrierオプションを受け入れるflagsパラメーターがあります。

func subscribe(subscriber: DaoDelegate) {
  (self.subscribers.q).async(flags: .barrier) { 
    //...
  }
}
41
Martin R