task blocks a high priority task from executing, which e ff ectively inverts their priorities. • GCD allows for di ff erent levels of priority on its background queues, so this is quite easily a possibility. enum Color: String { case blue = "🔵 " case white = "⚪ " } func output(color: Color, times: Int) { for _ in 1...times { print(color.rawValue) } } let starterQueue = DispatchQueue(label: "com.starter", qos: .userInteractive) let utilityQueue = DispatchQueue(label: "com.utility", qos: .utility) let backgroundQueue = DispatchQueue(label: "com.background", qos: .background) let count = 10 starterQueue.async { backgroundQueue.async { output(color: .white, times: count) } backgroundQueue.async { output(color: .white, times: count) } utilityQueue.async { output(color: .blue, times: count) } utilityQueue.async { output(color: .blue, times: count) } // priority inverted here backgroundQueue.sync {} }