더북(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() 메서드에 표현해 보았습니다.