C#의 Task(태스크) 클래스는 비동기 작업(asynchronous operation)을 나타내는 핵심 요소입니다. .NET의 TPL(Task Parallel Library, 작업 병렬 라이브러리)에 속해 있으며, 스레드를 직접 관리하지 않고도 효율적인 병렬 처리를 구현할 수 있게 해줍니다. 이번 글에서는 C#에서 태스크를 시작하는 대표적인 4가지 방법을 예제와 함께 살펴보겠습니다.
1. 델리게이트(delegate)로 태스크 시작하기
가장 전통적인 방식은 델리게이트를 인자로 전달하여 새로운 Task 인스턴스를 생성한 뒤, Start() 메서드를 호출하는 것입니다.
Task t = new Task(delegate { PrintMessage(); });
t.Start();
2. Task.Factory로 태스크 시작하기
Task.Factory.StartNew()를 사용하면 태스크를 생성하는 동시에 즉시 실행할 수 있습니다. 생성과 실행을 한 번에 처리하므로 코드가 더욱 간결해집니다.
Task.Factory.StartNew(() => { Console.WriteLine("Welcome!"); });
3. 람다식(Lambda)으로 태스크 시작하기
람다식을 활용하면 익명 메서드보다 짧고 가독성 좋은 코드를 작성할 수 있습니다.
Task t = new Task(() => PrintMessage()); t.Start();
4. Task.Run()으로 태스크 시작하기 (권장)
가장 기본적이면서도 널리 권장되는 방법은 Task.Run()을 사용하는 것입니다. 내부적으로 스레드 풀(Thread Pool)의 백그라운드 스레드에서 작업을 실행하기 때문에 간편하고 안전합니다.
예제 코드
using System;
using System.Threading.Tasks;
public class Example {
public static void Main() {
Task task = Task.Run(() => {
int a = 0;
for (a = 0; a <= 1000; a++){}
Console.WriteLine("{0} loop iterations ends", a);
});
task.Wait();
}
}
마무리 정리
C#에서 태스크를 시작하는 방법은 크게 네 가지로 정리할 수 있습니다. 델리게이트와 람다식은 명시적으로 인스턴스를 생성 후 Start()를 호출해야 하며, Task.Factory.StartNew()와 Task.Run()은 생성과 실행을 동시에 수행합니다. 특히 최신 C# 개발 환경에서는 간결하고 안전한 Task.Run() 사용이 가장 권장되니, 상황에 맞게 활용해 보시기 바랍니다.