Languages/C#

C# - 비동기 처리(async, await)

라큐브 2022. 7. 5. 02:47

async

- 메서드 내부에 await 키워드가 있다는 걸 알려주는 역할입니다.

- await 키워드가 없어도 되지만 Warning 메시지가 표시됩니다.

비동기 처리

동시에 시작하여 먼저 끝난 순서대로 반환됩니다.

await

- 작업이 끝날 때까지 대기하고 반환 값을 할당하는 경우 사용합니다.

 

반환 값 유무 X O
대기 지시문 Task.Wait() await Task

 

namespace Async
{
    class Program
    {
        static void Main(string[] args)
        {
            RunTask();
        }

        static async void RunTask()
        {
            Task TasksA = Task.Run(() => TaskA());
            Task TasksB = Task.Run(() => TaskB());
            Task TasksC = Task.Run(() => TaskC());
            Task<string> TasksD = Task.Run(() => TaskD());

            // ASync 비동기 실행

            // 반환 값이 없을 경우 Task.Wait()로 작업이 완료될때까지 대기.

            // Tasks A가 종료될때까지 대기 하세요.
            TasksA.Wait();
            // Tasks B가 종료될때까지 대기 하세요.
            TasksB.Wait();
            // Tasks C가 종료될때까지 대기 하세요.
            TasksC.Wait();
            // Tasks D가 종료될때까지 대기 하세요.
            TasksD.Wait();

            // await 키워드는 반환 값이 있을 때 사용.
            // await 키워드로 대기하고 반환 값 할당.
            string text = await TasksD;

            // Sync 동기 실행
            // TaskA();
            // TaskB();
            // TaskC();
        }

        static async void TaskA()
        {
            Thread.Sleep(3000);
            Console.WriteLine("Task A 종료!");
        }

        static async void TaskB()
        {
            Thread.Sleep(2000);
            Console.WriteLine("Task B 종료!");
        }

        static async void TaskC()
        {
            Thread.Sleep(1000);
            Console.WriteLine("Task C 종료!");
        }

        static async Task<string> TaskD()
        {
            Thread.Sleep(500);
            Console.WriteLine("Task D 종료!");

            return "Task D 종료!";
        }
    }
}
반응형