비동기 작업
static async Task Main(string[] args)
동기 작업
static void Main(string[] args)
1. static void Main(string[] args)
- 동기 실행:
이 방식은 전통적인 동기 실행 엔트리 포인트입니다.
메서드 내에서 기본적으로 await 같은 비동기 처리를 직접 사용할 수 없으며, 모든 작업을 동기적으로 처리해야 합니다. - 예시:
static void Main(string[] args)
{
Console.WriteLine("동기 프로그램 시작");
// 동기 코드 실행
DoWork();
Console.WriteLine("동기 프로그램 종료");
}
static void DoWork()
{
// 동기 작업 예시
Thread.Sleep(1000);
}
2. static async Task Main(string[] args)
- 비동기 실행:
C# 7.1부터 도입된 기능으로, Main 메서드를 비동기 방식으로 작성할 수 있습니다.
메서드가 Task 또는 **Task<int>**를 반환하므로, 내부에서 await 키워드를 사용해 비동기 작업을 자연스럽게 처리할 수 있습니다. - 장점:
- 비동기 코드 사용: HTTP 요청, 파일 I/O 또는 기타 비동기 API를 await를 사용하여 명료하게 작성할 수 있습니다.
- 예외 처리: 비동기 작업에서 발생한 예외도 적절하게 await 시점에서 처리할 수 있어, 비동기 코드의 예외 처리가 수월합니다.
- 예시:
static async Task Main(string[] args)
{
Console.WriteLine("비동기 프로그램 시작");
await DoWorkAsync();
Console.WriteLine("비동기 프로그램 종료");
}
static async Task DoWorkAsync()
{
// 예: 비동기 작업 예시 - 1초 대기
await Task.Delay(1000);
}
정리
- 동기 Main (static void Main):
- 전통적 방식
- 모든 작업을 순차적 동기적으로 처리
- await 사용 불가 (비동기 작업 호출 시 별도 동기화 처리 필요)
- 비동기 Main (static async Task Main):
- C# 7.1 이상부터 사용 가능
- 내부에서 await를 활용해 비동기 작업 수행
- 반환형이 Task (또는 Task<int>)이므로 비동기 작업의 완료를 기다림
- 코드가 비동기 흐름을 그대로 반영하므로 가독성이 높으며, 효율적인 리소스 사용이 가능
따라서, 프로그램 내에서 비동기 API 호출이나 I/O 작업을 자연스럽게 처리하려면 **static async Task Main(string[] args)**를 사용하고, 단순한 동기 작업만 수행할 경우에는 **static void Main(string[] args)**를 사용하면 됩니다.