This was a bug fixed in beta 6.
In beta 5, it not only behaves as you expected, but also with the condition .onQueueAsBarrier . The problem would be similar to async with the .barrier option, because if you execute it using the equivalent Objective-C API, dispatch_barrier_async , it works fine, for example:
let q = DispatchQueue(label: "q", attributes: .concurrent) BarrierExperiment.dispatchBarrierAsync(q) { dispatchPrecondition(condition: .onQueueAsBarrier(q)) Thread.sleep(forTimeInterval: 0.25) print("A") } q.async() { print("B") }
Where
@interface BarrierExperiment : NSObject + (void)dispatchBarrierAsync:(dispatch_queue_t)queue block:(void (^)())block; @end @implementation BarrierExperiment + (void)dispatchBarrierAsync:(dispatch_queue_t)queue block:(void (^)())block { dispatch_barrier_async(queue, block); } @end
source share