동시 큐: 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을 호출하여 사용상위 작업이 비존재Task.init(priority:operation:)