[C#] 비동기 프로그래밍 완벽 가이드

2025. 4. 17. 16:03개발이야기

728x90
반응형
반응형

 async와 await

C#에서는 비동기 작업을 간단하고 깔끔하게 처리할 수 있는 키워드가 있습니다.
바로 asyncawait입니다.

이번 글에서는 비동기 프로그래밍의 필요성과 함께, async/await 사용법을 예제와 함께 쉽게 정리합니다.


1. 비동기 프로그래밍이란?

"긴 작업을 백그라운드에서 처리하면서, 메인 프로그램은 멈추지 않게 하는 것"

  • 파일 다운로드, 데이터베이스 조회, 웹 API 호출처럼 시간이 오래 걸리는 작업은 비동기 처리 필수
  • 비동기를 쓰지 않으면 UI가 멈추거나 프로그램이 느려짐

 2. async와 await 기본 구조

 기본 형태

async Task 작업이름()
{
    await 긴작업();
}
  • async 키워드는 메서드를 비동기로 만듦
  • await는 비동기 작업이 끝날 때까지 기다렸다가 다음 코드를 실행

 간단한 예제

public async Task DoWorkAsync()
{
    Console.WriteLine("작업 시작");
    await Task.Delay(2000); // 2초 대기
    Console.WriteLine("작업 완료");
}

// 호출
await DoWorkAsync();

3. async/await 키워드 상세 설명

키워드 설명

async 메서드를 비동기로 선언 (Task 반환)
await 비동기 작업을 기다렸다가 완료되면 다음 코드 실행

 반환형

  • async Task: 반환값 없음 (void처럼 사용)
  • async Task<T>: 결과값 T를 비동기로 반환
  • async void: 이벤트 핸들러에서만 사용 권장 (일반 메서드에서는 사용 지양)

4. 여러 비동기 작업 동시에 실행하기

 Task.WhenAll

여러 작업을 병렬로 실행하고 모두 끝날 때까지 기다림

async Task RunMultipleTasksAsync()
{
    Task t1 = Task.Delay(1000);
    Task t2 = Task.Delay(2000);
    Task t3 = Task.Delay(1500);

    await Task.WhenAll(t1, t2, t3);
    Console.WriteLine("모든 작업 완료");
}

 주의사항

  • await를 쓰지 않으면 Task만 생성되고 실제 작업은 기다리지 않음
  • async void는 일반 메서드에서는 가급적 사용하지 말 것 (예외 추적이 어려움)
  • 비동기 메서드는 반드시 Task 또는 Task<T>를 반환하는 것이 좋음

이번 글에서는 C# 비동기 프로그래밍의 핵심인 async/await 개념을 정리했습니다.

  • async로 메서드를 비동기로 선언
  • await로 비동기 작업을 기다리면서 자연스럽게 코드 진행
  • 여러 Task를 동시에 실행하려면 Task.WhenAll 활용

 

728x90
반응형