[C#] Thread와 Task - ysp-laonpeople/DOC GitHub Wiki
Thread와 Task의 차이
- C#에서 Task는 Thread와 동일하게 비동기 작업을 처리하기 위해 사용합니다.
- Thread는 Main Thread와 완전 독립적으로 동작하기 때문에 프로세스가 종료되는 시점에도 주어진 작업을 계속 하게 됩니다.
- ThreadPool을 생성하고 이를 관리하여 이용하는 방법이 있지만 Task는 이를 자동으로 처리해주기 때문에 간편하게 사용할 수 있습니다.
TestCode
- MainThread에서 DoWork를 실행하고 사용자가 키를 입력하면 종료되는 프로그램입니다.
static void Main(string[] args)
{
//Thread
//Thread t1 = new Thread(DoWork);
//t1.Start();
//Task
//Task t2 = new Task(DoWork, null);
//t2.Start();
//ThreadPool
//ThreadPool.QueueUserWorkItem(DoWork, null);
Console.ReadLine();
}
static void DoWork(object obj)
{
while (true);
}
Thread
- 키를 입력했지만 프로그램이 종료되지 않고 DoWork가 종료될때까지 대기합니다.
static void Main(string[] args)
{
//Thread
Thread t1 = new Thread(DoWork);
t1.Start();
Console.ReadLine();
}

ThreadPool
- 키를 입력하면 DoWork와 함께 프로그램이 종료됩니다
static void Main(string[] args)
{
//ThreadPool
ThreadPool.QueueUserWorkItem(DoWork, null);
Console.ReadLine();
}
Task
- 키를 입력하면 DoWork와 함께 프로그램이 종료됩니다.
static void Main(string[] args)
{
//Task
Task t2 = new Task(DoWork, null);
t2.Start();
Console.ReadLine();
}
내가 Task를 사용하는 이유
- 비동기 작업이 종료된 이후에 처리해야 하는 작업을 연속적으로 처리하기에 편리하기 때문입니다.
- 프로그램 종료 시 자동으로 관리되는 ThreadPool을 종료하므로 정상 종료가 보장됩니다.
static void Main(string[] args)
{
Task.Run(() =>
{
for (int i = 0; i < 5000; i++)
Thread.Sleep(1);
Console.WriteLine("End");
})
.ContinueWith((t) => { Console.WriteLine("continue 1"); })
.ContinueWith((t) => { Console.WriteLine("continue 2"); });
Console.WriteLine("wait key");
Console.ReadLine();
}
