Ответ 1
Метод async()
имеет параметр flags
, который принимает .barrier
вариант:
func subscribe(subscriber: DaoDelegate) {
(self.subscribers.q).async(flags: .barrier) {
//...
}
}
Рефакторинг кода коллеги, и я ищу эквивалент 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 без рефакторинга всех типов очередей?
Метод async()
имеет параметр flags
, который принимает .barrier
вариант:
func subscribe(subscriber: DaoDelegate) {
(self.subscribers.q).async(flags: .barrier) {
//...
}
}