эквивалент dispatch_barrier_async в Swift 3

Рефакторинг кода коллеги, и я ищу эквивалент dispatch_barrier_async в swift 3. В игре много очередей, и его дизайн состоит в том, чтобы блокировать только эту очередь и только для этой единственной операции.

// 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 без рефакторинга всех типов очередей?


person SimplGy    schedule 28.06.2016    source источник


Ответы (1)


Метод async() имеет параметр flags, который принимает параметр .barrier:

func subscribe(subscriber: DaoDelegate) {
  (self.subscribers.q).async(flags: .barrier) { 
    //...
  }
}
person Martin R    schedule 28.06.2016
comment
Работает отлично. Только что получил такой же ответ из списка рассылки swift-users. - person SimplGy; 29.06.2016