iOS 응용 (swift)
[iOS - swift] 2. Async, Await 간단 사용 정리 (Concurrency) - 동시 처리 (async let)
jake-kim
2023. 10. 4. 01:24
1. Async, Await 간단 사용 정리 (Concurrency) - 사용 방법
2. Async, Await 간단 사용 정리 (Concurrency) - 동시 처리
* 해당 글에서는 간단한 사용법만 살펴보기 때문에, 개념적인 부분은 이전 포스팅 글 참고
동시 처리
- Async, Await를 사용하면 비동기 작업을 completion 클로저 블록 없이 한줄로 처리가 가능
let imageUrlString = "https://images.dog.ceo/breeds/australian-shepherd/pepper.jpg"
guard let url = URL(string: imageUrlString) else { return }
Task {
let image = try await loadImage(url: url)
}
- 코드상으로는 image를 불러오기를 기다리며 await 하위 부분은 실행이 되지 않고 기다리는 상태
let image = try await loadImage(url: url)
// wait for a loading image...
- 만약 여러 이미지를 불러오는 경우?
- 순차적으로 image1이 다 불러와야 image2가 불러오므로 특정 이미지가 늦게 불러오게되면 그만큼 기다리는 상태
let image1 = try await loadImage(url: url)
// wait for loading image...
let image2 = try await loadImage(url: url)
let image3 = try await loadImage(url: url)
let image4 = try await loadImage(url: url)
- image1, image2, image3, image4를 모두 동시에 불러오는 방법?
- async let 키워드를 사용하여 호출할 async 함수들을 프로퍼티로 만들고, await 배열로 묶어서 호출하면 동시에 호출이 가능
func imagesForConcurrency() async throws -> [UIImage] {
let imageUrlString = "https://images.dog.ceo/breeds/australian-shepherd/pepper.jpg"
guard let url = URL(string: imageUrlString) else { return [] }
async let first = loadImage(url: url)
// no wait for loading image
async let second = loadImage(url: url)
async let third = loadImage(url: url)
return try await [first, second, third]
}
* 전체 코드: https://github.com/JK0369/ExAsyncAwait_1
* 참고