async{ code block }
혹은 async(execute:)
로 비동기 작업을 처리
- async라는 메서드에는 우리가 사용한 클로저 외에도 기본값을 가지는 3가지의 파라미터가 더 존재함
- DispatchGroup이라는 GCD의 고급기능도 있음
func async(group: DispatchGroup? = nil,
qos: DispatchQoS = .unspecified,
flags: DispatchWorkItemFlags = [],
execute work: @escaping () -> Void)
1️⃣ group
- DispatchQueue의 async 코드 블록을 묶어서 관리해주는 DispatchGroup
- 여러 스레드에서 비동기로 작업을 처리할 때 여러 작업을 함께 관리할 수 있음
2️⃣ qos
- QoS는 DispatchQueue와 같은 내용
3️⃣ flags
-
DispatchWorkItemFlags 타입의 값을 받는 파라미터
-
코드 블록을 실행할 때 적용될 추가 속성을 결정
-
기본 값으로는 아무 속성도 부여하지 않음
-
flags 값은 OptionSet이므로 여러 속성을 한 번에 부여할 수 있음
-
assingCurrentContext
- 코드 블록을 실행하는 context(Queue 혹은 스레드)의 속성을 상속 받음
- QoS와 같은 속성을 동일하게 한다는 이야기
-
barrier
- concurrent queue 환경에서 barrier(장벽, 차단) 역할
- barrier 속성의 코드 블록이 실행되기 전에 실행되었던 코드들은 완료까지 실행됨
- barrier 속성의 코드 블록이 실행되기 전까지 다른 코드 블록은 실해되지 않음
-
detached
- 실행할 코드 블록에 실행 중인 context(Queue 혹은 스레드)의 속성을 적용하지 않음
-
enforceQoS
- 실행 중인 context의 QoS보다 실행할 코드 블록의 QoS에 더 높은 우선 순위를 부여
-
inheritQoS
- enforceQoS와 반대로 실행 중인 contextdml QoS에 더 높은 우선 순위 부여