728x90
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
'iOS > 설명' 카테고리의 다른 글
[iOS] xib에서 Custom View 생성하는 방법 (0) | 2022.07.09 |
---|---|
[iOS] UIModalPresentationStyle (0) | 2022.07.06 |
[iOS] CALayer mask (0) | 2022.07.02 |
[iOS] application(_:open:options:) 의 return 값은 어디서 사용되는가? (0) | 2022.06.25 |
[iOS] 상황별 app life cycle 메서드 호출 순서 (0) | 2022.06.06 |
댓글