본문 바로가기
iOS/설명

[iOS] DispatchGroup

by Sky Titan 2022. 7. 5.
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

댓글