최대 1 분 소요

😢상황

  • C#에서 async 메서드를 정의하고 실행했지만, 결과를 기다리지 않고 다음 코드가 실행되어 문제가 발생
  • 예: 파일 다운로드, 네트워크 요청, 딜레이 등 비동기 작업이 완료되기 전에 다음 로직이 실행됨

🛠️해결법

방법 1: await 키워드 사용

async Task MyAsyncMethod()
{
    await Task.Delay(1000);
    Console.WriteLine("1초 후 실행됨");
}
await MyAsyncMethod();  // 반드시 비동기 문맥 내에서 호출

💡 await는 해당 비동기 작업이 끝날 때까지 기다림


방법 2: Task.Result 또는 Task.Wait() 사용 (동기 방식)

Task task = MyAsyncMethod();
task.Wait();           // 또는 task.Result;

🔸 동기 방식으로 기다림. UI 쓰레드에서 사용하면 데드락 위험이 있으므로 주의
🔸 콘솔 앱이나 테스트 환경에서는 유용할 수 있음


방법 3: Main 메서드에서 async 사용 (C# 7.1 이상)

static async Task Main(string[] args)
{
    await MyAsyncMethod();
}

💡 프로그램 진입점에서도 비동기 실행이 가능


정리: 왜 이게 효과 있었는가?

  • async 메서드는 Task 또는 Task<T>를 반환하므로, 반드시 await를 사용하여 기다려야 실행 순서가 보장
  • await는 컴파일러가 상태 기계를 만들어 흐름을 자동으로 이어줌
  • 잘못된 호출(예: MyAsyncMethod();만 호출) 시에는 비동기 작업이 실행되더라도 제대로 기다려지지 않음