[C# 5.0] 비동기 호출의 반환 타입

eunjin lee·2022년 12월 21일
0

C# 9.0 프로그래밍

목록 보기
38/50

1. await 예약어가 적용된 메서드의 반환 타입

  • Task, Task<Result>는 비동기 처리를 위해 내부적인 존재가 되어있기 때문에, await에 따른 코드를 Task에 맡김으로써 비동기 기능을 간편하게 구현할 수 있다.
  • Task 타입을 await 없이 쓰는 것도 가능하며, ThreadPool.QueueUserWorkItem 메서드의 대용으로 쓸 수 있다.
  • Task <Result> 타입은 Result 타입의 값을 반환할 수 있다. Task 타입의 생성자가 Action 델리게이트를 인자로 받았다면, Task <Result> 타입은 Func 델리게이트를 인자로 받는다.

2. async 예약어가 적용된 메서드의 반환 타입

  • void, Task, Task<Result>만 허용한다.
  • async void는 예외 발생 시 프로세스가 비정상적으로 종료되므로 권장하지 않는다. EventHandler 타입이 아래와 같이 정의되었기 때문에 호환성을 위해 허용한 것일 뿐이다.
	delegate void EventHandler(object sender, EventArgs e)

3. async 메서드가 아닌 경우 비동기 처리

📝 샘플 코드

        static async Task AsyncFileRead(string filePath)
        {
            string fileTxt = await ReadAllTextAsync(filePath);
            Console.WriteLine(fileTxt);

        }

        static Task<string> ReadAllTextAsync(string filePath)
        {
            return Task.Factory.StartNew(()=> 
            {
                return File.ReadAllText(filePath);  
            });
        }
  • File.ReadAllText는 대응되는 비동기 버전의 메서드를 제공하지 않는다. 위와 같은 방식으로 BCL에서 Async 메서드로 제공되지 않았던 모든 메서드를 비동기로 변환할 수 있다.

0개의 댓글