[게임 서버] await 사용하기

2022. 7. 11. 20:02·공부/게임 서버
728x90

직원이 한 명 뿐인 식당이 있다. 직원은 설거지, 요리, 주문, 서빙을 모두 담당해야 한다.

async도 멀티스레드가 아닌 싱글스레드에서 활용되는 경우가 있다.

 

static async void TestAsync()
{
    Console.WriteLine("Start TestAsync");
    Task t = Task.Delay(3000);

    t.Wait();
    
    Console.WriteLine("End TestAsync");
}

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

    Console.WriteLine("while start");

    while (true)
    {
    }
}

 

메인에서는 TestAsync()를 실행한 뒤 while start라는 문장을 프린트한다. TestAsync 안에서 3초의 딜레이를 주고 t.Wait을 통해 기다리라는 명령을 하고 있으니 3초가 지날 때까지 "End TestAsync"와 "while start"는 프린트되지 않을 것이다.

 

3초 후

 

이렇게 3초가 지나야만 "End TestAsync"와 "while start"가 출력됐다.

 

식당에서 직원이 설거지를 하는 도중에 손님이 들어와 주문을 받으려고 할 때, 직원이 설거지를 끝낼 때까지 주문을 받을 수 없다고 말한다면 손님이 어떻게 생각할까? 매우 비효율적인 업무를 한다고 생각할 것이다. 직원은 상황에 맞게 자신의 업무가 끝나지 않은 경우에도 다른 업무를 탄력적으로 조절할 수 있어야 한다. 

위 상황에서도 마찬가지이다. 3초의 시간이 흐르지 않았어도 "while start"가 출력되는 게 효율적이라 할 수 있다. 이때 활용할 수 있는 것이 await이다.

 

static async void TestAsync()
{
    Console.WriteLine("Start TestAsync");
    await Task.Delay(3000);
    Console.WriteLine("End TestAsync");
}

 

t.Wait 대신 await를 넣고 프로그램을 실행하면

 

3초 후

 

우리가 원하는 데로 3초가 흐르지 않아도 "while start"가 실행되는 모습을 확인할 수 있다. 3초가 지나지 않아도 제어권이 TestAsync에서 메인으로 넘어가서 "while start"가 출력되는 것이다.

참고로 "End TestAsync"는 멀티스레드로 잡혀서 출력됐다.

 

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/

 

Asynchronous programming in C#

An overview of the C# language support for asynchronous programming using async, await, Task, and Task

docs.microsoft.com

 

728x90

'공부 > 게임 서버' 카테고리의 다른 글

[게임 서버] 게임 해킹에 대해 알아보자  (0) 2022.09.30
[게임 서버/암호학] 대칭키와 비대칭키  (0) 2022.09.30
[게임 서버] SetBuffer를 RecvBuffer, SendBuffer로 따로 빼내기 #2  (0) 2022.06.21
[게임 서버] SetBuffer를 RecvBuffer, SendBuffer로 따로 빼내기 #1  (0) 2022.06.20
[게임 서버] Listener, 네트워크 연결을 기다려보자  (0) 2022.06.20
'공부/게임 서버' 카테고리의 다른 글
  • [게임 서버] 게임 해킹에 대해 알아보자
  • [게임 서버/암호학] 대칭키와 비대칭키
  • [게임 서버] SetBuffer를 RecvBuffer, SendBuffer로 따로 빼내기 #2
  • [게임 서버] SetBuffer를 RecvBuffer, SendBuffer로 따로 빼내기 #1
돌멩이수프
돌멩이수프
Information technology
  • 돌멩이수프
    WHAT DOES "IT" STAND FOR?
    돌멩이수프
  • 전체
    오늘
    어제
    • 분류 전체보기 (232)
      • 언어 (73)
        • html (3)
        • css (1)
        • java (6)
        • C (26)
        • C++ (2)
        • C# (29)
      • 공부 (145)
        • Unity (40)
        • 게임 서버 (26)
        • 네트워크 (5)
        • 데이터베이스 (7)
        • EFCore (19)
        • 기타 (14)
        • Git (5)
        • 운영체제 (1)
        • 소프트웨어공학 (21)
      • 2024-여름 (12)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    tcp
    유니티
    디자인패턴
    네트워크
    EntityFramework
    자바
    백준
    Python
    unity
    C
    C#
    HTML
    Entityfamework
    java
    EFCore
    게임서버
    라즈베리파이
    코딩
    coding
    C언어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
돌멩이수프
[게임 서버] await 사용하기
상단으로

티스토리툴바