dispatch_barrier_async equivalent in Swift 3

concurrency, swift3

Solution

The `async()` method has a `flags` parameter which accepts a `.barrier` option:

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

Problem

Refactoring a colleague's code, and I'm looking for the equivalent of `dispatch_barrier_async` in swift 3. There are a lot of queues at play, and his design is to block only this queue, and only for this single operation. ``` // 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) //... } } ``` Can I keep that same functionality in Swift 3 without refactoring all the queue types?

Original source