C#비동기와 이벤트

Task.WhenAll 기본

여러 비동기 작업을 한 번에 기다릴 때 자주 쓰는 `Task.WhenAll`의 기본 패턴과 주의점을 정리합니다.

마지막 수정 2026년 3월 16일

기본 패턴

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에 과부하를 줄 수 있습니다. 무조건 많이 병렬화하기보다 제한을 두는 편이 안정적입니다.