iOS/설명
[iOS] DispatchGroup
Sky Titan
2022. 7. 5. 21:43
728x90
[iOS - swift] Dispatch Group
* Dispatch Queue 개념 먼저 확인: ios-development.tistory.com/138 GCD의 개념 GCD(Grand Central Dispatch)는 iOS에서 thread pool(생성된 Thread들)을 관리하는 개념 Dispatch Queue: Thread safe하게 Thread..
ios-development.tistory.com
Apple Developer Documentation
developer.apple.com
DispatchGroup
- 같은 DispatchQueue 혹은 다른 큐에 있는 비동기적으로 실행된 여러 작업들을 하나의 그룹으로 만들어서 그룹에 있는 모든 작업들이 끝났을 때 동기적으로 특정 작업을 실행할 수 있게 해준다.
- func enter(): Group에 Task를 1개 증가시킨다.
- func leave(): Group에 Task를 1개 감소시킨다.
- func notify(queue:execute:): Task 개수가 0이 되면 실행되며, 모든 태스크가 종료되었을 때 실행할 작업을 명시한다.
- queue: group작업이 완료되었을 때, execute block이 실행될 DispatchQueue 지정
- execute: group작업이 완료되었을 때 실행할 작업 block
Example
import UIKit
func test() {
let queue1 = DispatchQueue(label: "queue1")
let queue2 = DispatchQueue(label: "queue2")
let group = DispatchGroup()
//Task: 1
group.enter()
queue1.asyncAfter(deadline: .now() + 4, execute: {
print("queue1 complete")
group.leave() //Task: 0
})
group.enter() //Task: 2
queue2.asyncAfter(deadline: .now() + 2, execute: {
print("queue2 complete")
group.leave() //Task: 1
})
group.notify(queue: .main, execute: {
print("complete all task in \(Thread.current.isMainThread)")
})
defer {
print("test func complete")
}
}
test()
/* 결과
test func complete
queue2 complete
queue1 complete
complete all task in true
*/
728x90