비동기 처리(Task)

2경빈·2024년 11월 8일

C#

목록 보기
4/14

Task는 C#에서 비동기 작업을 나타내는 객체이다.
이를 통해 시간 소모가 큰 작업을 비동기적으로 수행하고 그 작업의 상태를 추적할 수 있다.
Task는 비동기 프로그래밍에서 핵심적인 역할을 하며, 특히 asyncawait 키워드와 함께 자주 사용된다.

1. Task란?

  • Task작업의 진행 상태와 결과를 나타내는 객체이다.
  • 비동기 작업이 완료될 때까지 기다리는 용도로 주로 사용되며, 작업이 완료되면 Task 객체를 통해 작업의 결과를 확인할 수 있다.
  • Task를 이용하면 코드의 비동기 작업을 수행하고, 필요할 경우 해당 작업이 끝날 때까지 대기(await 사용)를 할 수 있다.

2. Task의 종류

  • Task: 반환값이 없는 작업을 나타낸다. 비동기 작업이 완료되면 Task 객체는 단순히 완료 상태를 가리킨다.
  • Task<T>: 특정 데이터 타입 T를 반환하는 작업을 나타낸다. 작업이 완료되면 Task<T> 객체를 통해 작업 결과 값을 가져올 수 있다.

3. Task의 사용 예제

(1) Task 사용 예

Task는 반환값이 없는 비동기 작업을 나타낼 때 사용한다.

public async Task RunTaskAsync()
{
    Console.WriteLine("작업 시작...");
    await Task.Delay(2000);  // 2초 대기 (예: 작업이 걸리는 시간을 대기)
    Console.WriteLine("작업 완료!");
}

위 코드에서 Task.Delay(2000)은 2초 동안 대기하는 비동기 작업을 수행하고, 그 동안 메인 스레드는 다른 작업을 처리할 수 있다.

(2) Task 사용 예

Task<T>는 반환값이 있는 비동기 작업을 나타내며, await을 통해 작업 결과를 가져올 수 있다.

public async Task<int> CalculateAsync()
{
    await Task.Delay(2000);  // 2초 대기
    return 42;  // 결과 반환
}

public async Task ExecuteAsync()
{
    int result = await CalculateAsync();
    Console.WriteLine($"계산 결과: {result}");
}

위 예제에서 CalculateAsync는 2초 대기 후 int 값을 반환하는 작업이다. await CalculateAsync()로 결과를 받기 전까지 비동기 대기를 하고, 완료 후 result에 결과를 할당한다.

4. Task의 주요 기능

  • 작업 추적: Task는 작업의 진행 상태 (대기 중, 실행 중, 완료, 실패 등)를 관리하여 작업이 성공적으로 완료되었는지, 실패했는지 등을 확인할 수 있다.
  • 예외 처리: 비동기 작업에서 발생한 예외를 await을 통해 처리할 수 있다.
  • 병렬 처리 지원: 여러 Task를 병렬로 실행하여 작업의 효율을 높일 수 있다.

5. Task를 사용하는 이유

  • Task를 사용하면 긴 작업을 비동기적으로 처리할 수 있어, 애플리케이션의 응답성을 유지할 수 있다.
  • 여러 Task를 동시에 실행할 수 있으므로 작업 속도가 향상되고 리소스 활용이 최적화된.
  • 비동기 작업을 통해 가독성 높은 비동기 코드를 작성할 수 있어 유지보수가 쉬워진다.

요약

  • Task는 비동기 작업을 나타내는 객체로, 작업의 상태 추적과 비동기 대기를 지원한다.
  • Task는 반환값이 없는 작업, Task<T>는 특정 반환값을 갖는 작업을 나타낸다.
  • async, await와 함께 비동기 작업을 쉽게 구현하고 애플리케이션의 응답성을 높이는 데 유용하다.
profile
eggs before hatching

0개의 댓글