개발/Swift

Async let & TaskGroup Concurrency 예시

덤벨로퍼 2024. 4. 10. 19:56
  1. Async let 같은경우 서너개의 API를 동시 호출 해야 하는 경우 사용했다.

피드 화면의 경우 하나의 API 응답이 아닌 각각의 API 응답값을 조합해서 사용 해야했음.

응답이 모두 완료된 시점에 이벤트를 전달 해줘야 했음

각각의 함수도 모두 async 함수임

    public func getAllInitData() async {
        isRequesting.accept(true)
        async let birthdayFriends = getFriends()
        async let recommendedFriends = getRecommendedFriends()
        async let productGroups = getProductGroups()
        async let giftCards = getGiftCards(typeValue: thanksCardType.value.rawValue)
        _ = await (birthdayFriends, recommendedFriends, productGroups, giftCards)
        isRequesting.accept(false)
    }
    

이미 내부 함수에서 데이터 처리를 하고있어 응답값을 사용 하지는

병렬적으로 호출이 가능하며 여러 API 임에도 한곳에서 관리하는 부분이 좋음, getAllInitData 함수가 끝나는시점에 View를 업데이트 하던 원하는 동작을 실행 할수 있음

  1. Task Group
        let result = await withTaskGroup(of: Bool.self) { group in
            for updateList in splitUpdateList {
                group.addTask {
                    let result = await service.updateList(userIdentifier: userID,
                                                                    updateList: updateList)
                    switch result {
                    case .success:
                        return true
                    case .failure:
                        return false
                    }
                }
                
            }
            
            return await group.allSatisfy({ $0 })
        }
        return result
    }

Async 작업이 서너개 이상 or 동적 일때 사용함

반복문을 돌려서 같은 API 호출을 여러번 할때 사용