더북(TheBook)

56.5 Task.Run( ) 메서드로 비동기 메서드 호출하기

동기 메서드 내에서 비동기 메서드를 호출할 때는 Task.Run() 메서드를 사용할 수 있습니다. Task.Run() 메서드는 CPU 바인딩된(즉, CPU가 오래 처리해야 하는) 코드를 묶어 비동기 처리를 합니다. 다음 내용을 입력한 후 실행해 보세요.

Task.Run( ) 메서드로 비동기 메서드 호출: AsyncAwaitDescription.cs

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

class AsyncAwaitDescription
{
    static void Main()
    {
        Task.Run(() => DoPrint()); //1, 2, 3, ...
        Console.WriteLine("[?] async await 사용 예제");
        Thread.Sleep(1);
    }

    static async void DoPrint()
    {
        await PrintNumberAsync();
    }

    static async Task PrintNumberAsync()
    {
        await Task.Run(() =>
        {
            for (int i = 0; i < 300; i++)
            {
                Console.WriteLine(i + 1);
            }
        });
    }
}

실행 결과

[?] async await 사용 예제
1
2
...(생략)

이 코드는 Main()에서 Task.Run() 메서드로 비동기 메서드인 DoPrint()를 사용하는 내용을 보여 줍니다. 마찬가지로 Task.Run() 메서드 앞에 await 키워드를 붙여 비동기 메서드로 만드는 내용을 PrintNumberAsync() 메서드에 표현해 보았습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.