let serialQueue = DispatchQueue(label: "com.example.serial")
serialQueue.async { print("첫 번째 작업") }
serialQueue.async { print("두 번째 작업") }
// 항상 "첫 번째 작업" → "두 번째 작업" 순서로 출력
let concurrentQueue = DispatchQueue(label: "com.example.concurrent", attributes: .concurrent)
concurrentQueue.async { print("작업 A") }
concurrentQueue.async { print("작업 B") }
// A·B 중 먼저 실행·완료되는 작업이 달라질 수 있음
DispatchQueue.global(qos: .utility).async {
// 백그라운드 작업
}
DispatchQueue.main.async {
// UI 작업
}
let workItem = DispatchWorkItem {
print("DispatchWorkItem 실행")
}
DispatchQueue.global().async(execute: workItem)
workItem.cancel()
// 작업 내에서 isCancelled 확인
let workItem = DispatchWorkItem {
for i in 0..<5 {
guard !DispatchWorkItem.current!.isCancelled else { return }
print(i)
sleep(1)
}
}
DispatchQueue.global().async(execute: workItem)
// 나중에
workItem.cancel()
let group = DispatchGroup()
group.enter()
DispatchQueue.global().async {
// 작업 A
group.leave()
}
group.notify(queue: .main) {
print("모든 작업 완료 후 실행")
}
let concurrentQueue = DispatchQueue(label: "barrier.queue", attributes: .concurrent)
concurrentQueue.async(flags: .barrier) {
// barrier 블록: 앞선 모든 작업 끝난 뒤 실행
}
정리