본문 바로가기
YAGOM CAREER STARTER

[TIL] 20230314: wait()/notify(queue:)

by Rhode 2023. 3. 14.

본문은 야곰 아카데미 커리어 스타터 캠프를 통해 학습한 내용을 회고한 글입니다.


wait()/notify(queue:)

wait()의 경우 synchronous하게 동작하고, notify의 경우 asynchronous하게 동작한다.

 

 

wait()

이전에 제출된 업무들이 끝나길 기다리는 메서드이다.

 

wait()을 사용한 코드는 다음과 같다:

import Foundation

struct Printer {
    func printNumbersOne() {
        let group = DispatchGroup()
        let count = 10
        
        DispatchQueue.global().async(group: group) {
            for number in 1...count {
                print(number*2 - 1)
            }
        }
        DispatchQueue.global().async(group: group) {
            for number in 1...count {
                print(number*2)
            }
        }
        
        group.wait()
        print("숫자 출력 끝!1")
    }
}

let printer = Printer()
printer.printNumbersOne()

 

 

notify(queue:)

현재 그룹의 모든 일들이 끝났을 때 큐에게 할 일들의 블록을 넘겨준다.

notify(queue:)을 사용한 코드는 다음과 같다:

import Foundation

struct Printer {
    func printNumbersTwo() {
        let group = DispatchGroup()
        let count = 10
        
        DispatchQueue.global().async(group: group) {
            for number in 1...count {
                print(number*2 - 1)
            }
        }
        DispatchQueue.global().async(group: group) {
            for number in 1...count {
                print(number*2)
            }
        }
        
        group.notify(queue: DispatchQueue.global()) {
            print("숫자 출력 끝!2")
        }
    }
}

let printer = Printer()
printer.printNumbersTwo()