[C# 문법] Task 클래스 작업 인스턴스화

참고

 

Task 클래스란?

  • Task 클래스는 Task 값을 반환하지 않고 일반적으로 비동기적으로 실행되는 단일 작업을 나타냅니다.
  • Task 객체는 .NET Framework 4 에 처음 도입된 작업 기반 비동기 패턴의 핵심 구성 요소 중 하나입니다.

 

작업 인스턴스화

  • 다음 예제에서는 4개의 작업을 만들고 실행합니다.
  • 새로운 Task 형식 Object 의 Action 인수를 허용하는 action 대리자를 실행합니다.
  • 네 번째 작업은 Task 만들기 메서드 호출에서 인라인으로 정의된 람다 식을 실행합니다.
  • 각 작업은 인스턴스화되고 다른 방식으로 실행됩니다.
    • t1 태스크는 Task 클래스 생성자를 호출하여 인스턴스화 되지만 태스크가 시작된 후에 t2 만 메서드를 Start() 호출하여 시작됩니다.
    • t2 태스크는 인스턴스화되고 메서드를 호출하여 단일 메서드 호출에서 TaskFactory.StartNew(Action, Object) 시작됩니다.
    • t3 태스크는 인스턴스화되고 메서드를 호출하여 단일 메서드 호출에서 Run 시작됩니다.
    • t4 태스크는 RunSynchronously() 메서드를 호출하여 주 스레드에서 동기적으로 실행됩니다.
  • 때문에 t4 작업은 동기적으로 실행되고, 나머지 작업은 일반적으로 하나 이상의 스레드 풀에서 비동기 적으로 실행됩니다.
Action<object> action = (object obj) =>
{
    Console.WriteLine($"Task={Task.CurrentId} obj = {obj} Thread={Thread.CurrentThread.ManagedThreadId}");
};

Task t1 = new Task(action, "첫 번째 Task1");

Task t2 = Task.Factory.StartNew(action, "두 번째 Task2");

t2.Wait();

t1.Start();
Console.WriteLine("t1 has been launched. (Main Thread={0})",
                          Thread.CurrentThread.ManagedThreadId);

t1.Wait();

String taskData = "세 번째 Task3";
Task t3 = Task.Run(() =>
{
    Console.WriteLine($"Task={Task.CurrentId} obj = {taskData} Thread={Thread.CurrentThread.ManagedThreadId}");
});

t3.Wait();

Task t4 = new Task(action, "네 번째 Task4");
t4.RunSynchronously();
t4.Wait();
Task=1 obj = 두 번째 Task2 Thread=6
t1 has been launched. (Main Thread=1)
Task=2 obj = 첫 번째 Task1 Thread=4
Task=3 obj = 세 번째 Task3 Thread=4
Task=4 obj = 네 번째 Task4 Thread=1
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY