본문 바로가기
PROGRAMING📚/Unity📑

[UNITY]Task.Start/Task.Run 메소드

별찌루 2024. 4. 8.
728x90
반응형

Task.Start와 Task.Run 는 둘다 비 동기 작업을 시작하는데 사용되는 메소드이다

Task.Start 메소드

public void Start ();
public void Start (System.Threading.Tasks.TaskScheduler scheduler);

 

Task.Start 는 새로운 Task 인스턴스를 생성하고 시작하는데 사용된다

기본적으로 TaskScheduler.Current 에서 실행된다

주로 커스텀 스케줄링 로직을 사용하거나 특정 스레드에서 작업을 실행 하려는 경우 사용된다

Task.Factory.StartNew 와 유사한 동작을 한다

 

Task 생성자를 호출해서 현재 작업을 시작하고 스케줄러에 대한 실행을 예약한다

using System;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = new Task( () => { 
      // 비동기 또는 CPU-bound 작업 실행
      Console.WriteLine("Task {0} running on thread {1}",
      Task.CurrentId, Thread.CurrentThread.ManagedThreadId);
      for (int ctr = 1; ctr <= 10; ctr++)
          Console.WriteLine("   Iteration {0}", ctr); } 
       );
      t.Start();
      t.Wait();   
   }
}

 

Task.Run() 메서드

Task.Run() 주어진 작업을 TaskScheduler.Default 에서 실행하는데 사용되고

CPU-Bound 나 비동기 작업을 포함하는 메서드를 호출할 때 사용한다

지정한 작업을 ThreadPool에서 실행하도록 큐에 대기시키고 해당 작업에 대한 작업 또는 Task<TResult> 핸들을 반환한다

Task.Run() 안에 비동기적으로 실행할 작업을 넣어 사용이 가능하다 

 

using System;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      ShowThreadInfo("Application");
      var t = Task.Run(() => ShowThreadInfo("Task") );
      t.Wait();
   }

   static void ShowThreadInfo(String s)
   {
      Console.WriteLine("{0} thread ID: {1}",
                        s, Thread.CurrentThread.ManagedThreadId);
   }
}
// The example displays the following output:
//       Application thread ID: 1
//       Task thread ID: 3
using System;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      Console.WriteLine("Application thread ID: {0}",
                        Thread.CurrentThread.ManagedThreadId);
      var t = Task.Run(() => {  Console.WriteLine("Task thread ID: {0}",
                                   Thread.CurrentThread.ManagedThreadId);
                             } );
      t.Wait();
   }
}
// The example displays the following output:
//       Application thread ID: 1
//       Task thread ID: 3

 

주요 차이점은 Task.Run이 일반적으로 기본 스레드 풀을 사용하여 작업을 실행하는 반면, 

Task.Start는 생성된 Task 인스턴스의 실행을 시작하고 현재 스레드 컨텍스트에 따라 실행 할 수 있다

대부분의 경우 Task.Run을 사용하여 작업을 실행하는 것이 더 편리하고 명시적이다

 

728x90
반응형

댓글