Home C#의 Task와 Thread, 그리고 Async, Await
Post
Cancel

C#의 Task와 Thread, 그리고 Async, Await

C#의 Task와 Thread를 비교하고 Async, Await에 대해 알아보기

질문

C#의 Task란?

C#의 Thread와 Task의 비교

  • 생성 비용과 관리 방법
  • 결과 처리 방법

C#의 Async/Await

Task

Task

  • 비동기 프로그래밍과 병렬 처리를 위해 .NET에서 사용되는 클래스
  • System.Threading.Tasks 네임스페이스에 정의
  • .NET이 스레드 풀로 자동 관리해 스레드 생성 비용이 낮고 재사용이 가능하며, 효율적으로 자원을 관리

비동기 작업 단위

  • 비동기 작업을 표현하는 고수준의 추상화 API
  • 비동기 작업의 시작, 진행 중, 완료, 취소 등의 상태를 관리

결과 반환 가능

  • Task<TResult> 제네릭 클래스를 통해 작업 완료 시 결과 반환 가능
  • 비동기 작업 중 발생한 예외를 Task 객체를 통해 관리하고 처리

Thread

특징TaskThread
생성 비용, 관리.NET이 스레드 풀로 자동 관리해 스레드 생성 비용이 낮고 재사용이 가능하며, 효율적으로 자원을 관리스레드 생성 시마다 시스템 자원이 소비되며 생성 비용과 관리 비용이 크고 직접 해야 함
결과 반환Task<T>를 통해 작업의 결과를 반환할 수 있음직접 처리해야 하며, 반환 기능이 없음
비동기 프로그래밍비동기/병렬 처리에 최적화됨 (async/await와 함께 사용)비동기 처리에 적합하지 않음(비동기 작업 구현 시 콜백이나 다른 동기화 메커니즘을 직접 관리해야 함)
수명작업이 끝나면 자동으로 반환수동으로 스레드를 종료하거나 관리해야 함
상태 추적작업 상태 추적 가능상태를 직접 관리해야 함

Async, Await

Async

  • 메서드를 비동기적으로 실행하겠다는 것을 나타냄
  • 반환 타입으로 Task 또는 Task<T>를 사용해야 함
  • 비동기 메서드는 이름에 async를 붙임

Await

  • 비동기 작업의 완료를 기다리고, 완료 후 다음 코드를 실행
  • await를 사용하면 코드 흐름이 동기적으로 보이지만 실제로는 비동기적으로 실행
  • 호출하는 작업이 완료될 때까지 호출한 메서드의 나머지 실행을 일시 중단하고, 다른 작업을 수행할 수 있게 함

Task와 Async/Await의 동작 과정

  1. async 메서드 호출
    • 호출 즉시 실행되지 않고 Task 객체를 반환
  2. await 키워드 사용
    • 비동기 작업이 완료될 때까지 기다렸다가 결과 반환
  3. 컨텍스트 전환
    • UI 스레드가 아닌 별도의 스레드에서 작업을 수행
    • 작업이 완료되면 다시 원래의 스레드로 복귀

출처

TPL(작업 병렬 라이브러리)

Task 클래스

Thread 클래스

This post is licensed under CC BY 4.0 by the author.