사용 예 : 여러 애니메이션이 효과가 겹처 있을때, 애니메이션 작업이 모두 종료된 시점을 알고 싶을때
let queue = DispatchQueue(label: "queue1", attributes: .concurrent)
let queue2 = DispatchQueue(label: "queue2", attributes: .concurrent)
//MARK: 그룹 생성하기
let group = DispatchGroup()
//MARK: 큐로 보낼때, 어떤 그룹에 넣을것인지 정해주기
queue.async(group: group) {
for i in 1...5 {
print("num \(i)")
}
}
//MARK: 큐로 보낼때, 어떤 그룹에 넣을것인지 정해주기
queue2.async(group: group) {
for i in 6...7 {
print("num \(i)")
}
}
let queueForGroup = DispatchQueue(label: "queue3", attributes: .concurrent)
// MARK: group이 끝난후 실행할 Queue 삽입
group.notify(queue: queueForGroup) {
print("----종료----")
}
let queueWait = DispatchQueue(label: "queue")
let queueWait2 = DispatchQueue(label: "queue2")
let groupWait = DispatchGroup()
queueWait.async(group: groupWait) {
for i in 10...15 {
print("wait \(i)")
}
}
queueWait2.async(group: groupWait) {
for i in 16...20 {
print("wait \(i)")
}
}
let runQueue = DispatchQueue(label: "runQueue")
groupWait.notify(queue:runQueue) {
print("----끝----")
}
//MARK: - 그룹작업이 다 끝나야만 다음 작업을 할 수 있는 상황의 앱이라면 wait메서드를 이용하면 된다.
groupWait.wait(timeout: DispatchTime.distantFuture)
인프런 - iOS Concurrency(동시성) 프로그래밍, 동기 비동기 처리 그리고 GCD/Operation - 디스패치큐와 오퍼레이션큐의 이해