개발자이야기/C#

[C#] 비동기 프로그래밍 예제

퐈니스타일 2023. 7. 31. 16:11

C#은 비동기 프로그래밍을 지원하는 강력한 언어입니다. 비동기 프로그래밍은 CPU 작업 외에도 I/O 작업 (예: 파일 읽기/쓰기, 네트워크 통신 등)과 같은 블로킹 작업을 효율적으로 처리하기 위해 사용됩니다. 이를 통해 다중 작업을 동시에 처리하여 응용 프로그램의 성능과 반응성을 향상시킬 수 있습니다.

C#에서 비동기 프로그래밍을 구현하는 방법은 다음과 같습니다:

  1. async와 await 키워드: C# 5.0 이상에서는 async와 await 키워드를 사용하여 비동기 메서드를 정의하고 호출합니다. 비동기 메서드는 반환 형식 앞에 "async" 키워드를 붙이고, 비동기적으로 실행하고자 하는 블록 앞에 "await" 키워드를 붙입니다.
  2. Task와 Task<T>: 비동기 작업은 일반적으로 Task 또는 Task<T> 객체를 반환하는 메서드로 구현됩니다. 이러한 Task 객체는 비동기 작업의 상태를 나타내고, 작업이 완료되면 결과를 포함하게 됩니다.
  3. Task.Run 메서드: Task.Run 메서드를 사용하여 새로운 스레드에서 비동기 메서드를 실행할 수 있습니다.
  4. 비동기 이벤트 처리: 비동기 이벤트 핸들러를 사용하여 비동기적으로 이벤트를 처리할 수 있습니다.

아래는 간단한 예제를 통해 비동기 프로그래밍을 설명합니다

using System;
using System.Threading.Tasks;

public class AsyncExample
{
    public async Task<string> DownloadDataAsync(string url)
    {
        // 비동기적으로 데이터 다운로드 작업을 수행합니다.
        await Task.Delay(1000); // 임의의 비동기 작업 대신 딜레이를 사용하여 시뮬레이션합니다.
        return "Downloaded data from " + url;
    }
}

public class Program
{
    public static async Task Main()
    {
        AsyncExample example = new AsyncExample();
        string url = "https://example.com/data";

        // 비동기 메서드를 호출하고 결과를 받아옵니다.
        string result = await example.DownloadDataAsync(url);

        Console.WriteLine(result);
    }
}

이 예제에서는 "DownloadDataAsync"라는 비동기 메서드를 정의하여 1초의 딜레이를 갖는 시뮬레이션 데이터 다운로드 작업을 수행합니다. 그리고 "Main" 메서드에서 이 비동기 메서드를 호출하고, "await" 키워드를 사용하여 결과를 기다리고 출력합니다.

비동기 프로그래밍을 사용하면 I/O 바운드 작업을 효율적으로 처리할 수 있으며, UI 스레드와 같은 메인 스레드의 블로킹을 피하여 앱의 응답성을 향상시킬 수 있습니다. 그러나 잘못된 사용은 앱의 성능을 저하시킬 수 있으므로, 비동기 프로그래밍을 구현할 때는 신중하게 고려하고 디버깅해야 합니다.

728x90
반응형