Task는 내부적으로 스레드 풀(Thread Pool)을 사용하며, 결국 작업은 스레드에서 실행됩니다.| 특징 | Task | Thread |
|---|---|---|
| 추상화 수준 | 고수준 추상화 (Thread의 상위 개념) | 저수준 추상화 |
| 리소스 관리 | .NET 런타임이 스레드 풀을 자동으로 관리 | 개발자가 직접 스레드를 생성하고 종료 관리 |
| 사용 편의성 | async/await 키워드를 통해 비동기 코드를 쉽게 작성 가능 | 비동기 작업을 수동으로 구현해야 함 |
| 작업 결과 반환 | Task를 통해 작업 결과 반환 가능 | 직접적으로 결과를 반환할 수 없음 |
| 스케줄링 | .NET의 Task Scheduler가 자동으로 스케줄링 | 개발자가 직접 스케줄링 논리를 구현해야 함 |
| 오버헤드 | 스레드 풀을 사용해 경량화된 작업 처리 | 새로운 스레드를 생성할 때마다 높은 오버헤드 발생 |
| 취소 및 예외 처리 | 내장된 취소 토큰(CancellationToken)과 예외 처리 지원 | 취소와 예외 처리를 별도로 구현해야 함 |
async/await 키워드와 함께 사용하면 비동기 코드를 동기 코드처럼 작성할 수 있어 가독성이 높아짐.using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Console.WriteLine("Task 시작");
// Task를 사용하여 비동기 작업 실행
await Task.Run(() =>
{
for (int i = 0; i
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine($"Thread 실행 중: {i}");
Thread.Sleep(500); // 500ms 대기
}
});
thread.Start(); // Thread 시작
thread.Join(); // Thread 완료 대기
Console.WriteLine("Thread 완료");
}
}
Thread 시작
Thread 실행 중: 0
Thread 실행 중: 1
Thread 실행 중: 2
Thread 실행 중: 3
Thread 실행 중: 4
Thread 완료
Task는 고수준 추상화를 제공하며, 비동기 및 병렬 프로그래밍에서 더 간결하고 효율적인 코드를 작성할 수 있습니다.Thread는 저수준 제어가 가능하지만, 복잡성과 리소스 소비가 더 높습니다.Task를 사용하는 것이 권장되며, 특정 상황에서만 Thread를 사용합니다.Task:
async/await)이 필요한 경우Thread: