C#에서 Asynchronous(비동기) 프로그래밍이란 프로그램이 작업을 시작하고 완료될 때까지 기다리지 않고 다른 작업을 계속 수행할 수 있도록 하는 프로그래밍 방식입니다. 비동기 프로그래밍을 사용하면 프로그램의 성능과 응답성을 높일 수 있습니다. 특히, 긴 시간 동안 실행되는 작업(예: 파일 입출력, 네트워크 호출, 데이터베이스 쿼리 등)을 비동기적으로 처리하면 사용자 인터페이스가 멈추지 않고 다른 작업을 계속할 수 있습니다.
C#에서 비동기 프로그래밍의 주요 개념
- async 키워드:
- 메서드를 비동기 메서드로 정의할 때 사용됩니다.
- 비동기 메서드는
async
키워드를 사용하여 정의되며,await
키워드를 포함할 수 있습니다.
- await 키워드:
- 비동기 메서드 내에서 사용되며, 비동기 작업이 완료될 때까지 기다립니다.
await
키워드를 사용하면 메서드가 작업이 완료될 때까지 기다리지만, 스레드는 차단되지 않습니다. 즉, 다른 작업을 계속할 수 있습니다.
- Task 및 Task<TResult>:
Task
는 비동기 작업을 나타내는 클래스입니다.Task<TResult>
는 결과를 반환하는 비동기 작업을 나타냅니다.Task
객체는 비동기 작업의 상태를 나타내고, 완료되면 결과를 반환할 수 있습니다.
예제 코드
다음은 비동기 프로그래밍의 기본 예제입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { Console.WriteLine("작업 시작"); // 비동기 메서드를 호출하고 작업이 완료될 때까지 기다립니다. string result = await LongRunningOperationAsync(); Console.WriteLine($"작업 완료: {result}"); } static async Task<string> LongRunningOperationAsync() { // Task.Delay는 주어진 시간(ms)만큼 비동기적으로 대기하는 메서드입니다. await Task.Delay(3000); // 3초 대기 return "완료"; } } |
위 예제에서 LongRunningOperationAsync
메서드는 3초 동안 대기한 후 문자열 “완료”를 반환합니다. await
키워드를 사용하여 LongRunningOperationAsync
메서드가 완료될 때까지 기다리지만, 그 동안 다른 작업을 계속 수행할 수 있습니다.
비동기 프로그래밍의 장점
- 응답성: 긴 작업을 수행하는 동안에도 사용자 인터페이스가 응답성을 유지합니다.
- 효율성: I/O 바운드 작업에서 스레드를 차단하지 않으므로 자원을 더 효율적으로 사용할 수 있습니다.
- 확장성: 여러 비동기 작업을 병렬로 수행하여 프로그램의 처리량을 늘릴 수 있습니다.
C#의 비동기 프로그래밍은 주로 async
와 await
키워드를 사용하여 구현되며, 이를 통해 코드의 가독성과 유지보수성을 높일 수 있습니다.