2016-06-28 12 views
20

Refactoring einen Kollegen Code, und ich bin auf der Suche nach dem Gegenstück dispatch_barrier_async in swift 3. Es gibt eine Menge Warteschlangen im Spiel, und sein Design ist nur diese Warteschlange zu blockieren, und nur dafür einzelne Operation.dispatch_barrier_async Äquivalent in 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) 
    //... 
    } 
} 

Kann ich Sie daran, dass gleiche Funktionalität in Swift 3 ohne die Typen Warteschlange alle Refactoring?

Antwort

35

Die async() Methode hat einen flags Parameter, die eine .barrier Option akzeptiert:

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

perfekt funktioniert. Habe die selbe Antwort von der 'swift-users'-Mailingliste bekommen. – SimplGy