Referenced by
동시 큐
: queue에 다수의 작업을 보내 여러개의 스레드
로 분배시켜 각 스레드는 작업을 분산 처리직렬 큐
: queue에 다수의 작업을 보내지만 동시큐와 다르게 한개의 스레드
에서 작업 순차 진행단점 존재코드
let firstPhoto = await downloadPhoto(named: photoNames[0])
let secondPhoto = await downloadPhoto(named: photoNames[1])
let thirdPhoto = await downloadPhoto(named: photoNames[2])
let photos = [firstPhoto, secondPhoto, thirdPhoto]
show(photos)
반환 완료
대기한 번에 하나만
실행단점 개선코드
async let firstPhoto = downloadPhoto(named: photoNames[0])
async let secondPhoto = downloadPhoto(named: photoNames[1])
async let thirdPhoto = downloadPhoto(named: photoNames[2])
let photos = await [firstPhoto, secondPhoto, thirdPhoto]
show(photos)
이전 코드의 완료를 기다리지 않고
진행async let
을 사용하여 코드 병렬 진행 → async let 사용 시 await
작성await
사용일시 중단되는 동안 다른 코드를 실행
할 수 있는 장점
존재task는 비동기적
으로 실행할 수 있는 작업의 단위
, 모든 비동기 코드는 task의 일부 실행
async - let 구문은 하위 작업
을 생성 → task group
생성하여 해당 그룹에 하위 작업을 추가 가능
우선순위 및 취소
를 쉽게 제어
await withTaskGroup(of: Data.self) { taskGroup in
let photoNames = await listPhotos(inGallery: "Summer Vacation")
for name in photoNames {
taskGroup.addTask { await downloadPhoto(named: name) }
}
}
withTaskGroup
을 호출하여 사용