기본 패턴
csharp
Task<User> userTask = LoadUserAsync();
Task<Order[]> orderTask = LoadOrdersAsync();
await Task.WhenAll(userTask, orderTask);
User user = await userTask;
Order[] orders = await orderTask;설명
- 서로 독립적인 비동기 작업을 동시에 시작한 뒤 한 번에 기다릴 수 있습니다.
- 순차로 기다리는 것보다 전체 대기 시간을 줄이기 쉽습니다.
- API 호출 여러 개를 동시에 묶을 때 특히 자주 씁니다.
짧은 예제
csharp
var tasks = urls.Select(url => http.GetStringAsync(url));
string[] pages = await Task.WhenAll(tasks);빠른 정리
| 패턴 | 의미 |
|---|---|
Task.WhenAll(a, b) | 여러 작업 완료까지 대기 |
| 먼저 task 생성 | 동시에 시작하게 만드는 핵심 |
| 완료 후 결과 사용 | 각 task의 결과를 다시 꺼내기 |
주의할 점
작업 수가 너무 많으면 외부 API나 DB에 과부하를 줄 수 있습니다. 무조건 많이 병렬화하기보다 제한을 두는 편이 안정적입니다.