센로그

[C#] Task 메서드 비교 본문

게임/Unity, C#

[C#] Task 메서드 비교

seeyoun 2023. 7. 13. 12:54

Task.Delay() vs Thread.Sleep()

Task.Delay() 비동기
Thread.Sleep() 동기

 

그럼 Task.Delay()는 왜 쓰냐!

static async Task Main(string[] args){
    Task delayTask = Task.Delay(2000);	//기다림 시작
    /*작업 본문*/
    await delayTask;
}

이런 식으로 씀. 

 

작업 본문을 최소 2초동안 하고싶을 때 쓴다는 소리 ㅇㅇ.

 


Task.Wait() vs await

Wait() 동기 대기 (해당 함수를 호출한 스레드가 블록됨)
await 비동기 대기

 

친구와 함께 레스토랑에서 스프를 주문(Wait 또는 await이 들어간 함수 호출)했다고 하자.

 

스프가 완성되기를 기다리고(Wait 또는 await),

완성되면 웨이터가 스프를 서빙해줄 것이다.(Wait 또는 await이 완료되면 수행될 작업)

 

Task.Wait은 스프가 완성되고 서빙될 때까지 친구랑 이야기 안하고 기다리다가, 완료되고 나서 이야기하기 시작하는것

await은 스프 완성을 기다리는 동안 친구랑 이야기하다가, 도중에 완성된 스프가 서빙되고 계속 남은 이야기를 하는 것.

 

static void Main(string[] args)
{
    string s;

    // 1. Wait
    Delay_Wait();   
    s = Console.ReadLine(); // 친구와 얘기
    Console.WriteLine("대화 내용: " + s);

    Console.WriteLine("==========================");

    // 2. await
    Delay_await();  
    s = Console.ReadLine(); // 친구와 얘기
    Console.WriteLine("대화 내용: " + s);

}


static async Task Delay_Wait()
{
    Task t = Task.Delay(5000);
    /*스프 제작*/
    t.Wait();
    Console.WriteLine("--Wait한 스프 서빙--");
}
static async Task Delay_await()
{
    Task t = Task.Delay(5000);
    /*스프 제작*/
    await t;
    Console.WriteLine("--await한 스프 서빙--");
}

 

출력

 

※ Task.Result도 Task.Wait과 마찬가지로 동기 대기를 한다.

 

 

Comments