C#/C# 문법
[C# 문법] Task 클래스 작업 인스턴스화
범범조조
2022. 5. 22. 18:22
참고
Task 클래스란?
- Task 클래스는 Task 값을 반환하지 않고 일반적으로 비동기적으로 실행되는 단일 작업을 나타냅니다.
- Task 객체는 .NET Framework 4 에 처음 도입된 작업 기반 비동기 패턴의 핵심 구성 요소 중 하나입니다.
작업 인스턴스화
- 다음 예제에서는 4개의 작업을 만들고 실행합니다.
- 새로운 Task 형식 Object 의 Action 인수를 허용하는 action 대리자를 실행합니다.
- 네 번째 작업은 Task 만들기 메서드 호출에서 인라인으로 정의된 람다 식을 실행합니다.
- 각 작업은 인스턴스화되고 다른 방식으로 실행됩니다.
- t1 태스크는 Task 클래스 생성자를 호출하여 인스턴스화 되지만 태스크가 시작된 후에 t2 만 메서드를 Start() 호출하여 시작됩니다.
- t2 태스크는 인스턴스화되고 메서드를 호출하여 단일 메서드 호출에서 TaskFactory.StartNew(Action
- 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