영어로 읽기

다음을 통해 공유


컴파일러 오류 CS4009

'Type.Method': 진입점은 async 한정자로 표시될 수 없습니다.

애플리케이션 진입점(일반적으로 Main 메서드)에서는 async 키워드를 사용할 수 없습니다.

중요

C# 7.1부터 Main 메서드에는 async 한정자가 있을 수 있습니다. 자세한 내용은 비동기 기본 반환 값을 참조하세요. C# 언어 버전을 선택하는 방법에 대한 자세한 내용은 C# 언어 버전 선택 문서를 참조하세요.

예시

다음 예에서는 CS4009를 생성합니다.

using System;
using System.Threading.Tasks;

public class Example
{
    public static async void Main()
    {
        Console.WriteLine("About to wait two seconds");
        await WaitTwoSeconds();
        Console.WriteLine("About to exit the program");
    }

    private static async Task WaitTwoSeconds()
    {
        await Task.Delay(2000);
        Console.WriteLine("Returning from an asynchronous method");
    }
}

이 오류를 해결하려면

프로젝트에서 사용하는 C# 언어 버전을 7.1 이상으로 업데이트합니다.

C# 7.0 이하를 사용하는 경우 애플리케이션 진입점의 서명에서 async 키워드를 제거합니다. 또한 애플리케이션 진입점에서 비동기 메서드를 기다리는 데 사용한 모든 await 키워드를 제거합니다.

그러나 진입점이 실행을 다시 시작하기 전에 비동기 메서드가 완료될 때까지 기다려야 합니다. 그렇지 않으면 컴파일 시 컴파일러 경고 CS4014가 생성되고 비동기 작업이 완료되기 전에 애플리케이션이 종료됩니다. 다음 예제에서는 이 문제를 보여 줍니다.

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
       Console.WriteLine("About to wait two seconds");
       WaitTwoSeconds();
       Console.WriteLine("About to exit the program");
   }

   private static async Task WaitTwoSeconds()
   {
      await Task.Delay(2000);
      Console.WriteLine("Returning from an asynchronous method");
   }
}
// The example displays the following output:
//       About to wait two seconds
//       About to exit the program

Task를 반환하는 메서드를 기다리려면 다음 예와 같이 해당 Wait 메서드를 호출합니다.

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
       Console.WriteLine("About to wait two seconds");
       WaitTwoSeconds().Wait();
       Console.WriteLine("About to exit the program");
   }

   private static async Task WaitTwoSeconds()
   {
      await Task.Delay(2000);
      Console.WriteLine("Returning from an asynchronous method");
   }
}
// The example displays the following output:
//       About to wait two seconds
//       Returning from an asynchronous method
//       About to exit the program

Task<TResult>를 반환하는 메서드를 기다리려면 다음 예와 같이 해당 Result 속성 값을 검색합니다.

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
       Console.WriteLine("About to wait two seconds");
       int value = WaitTwoSeconds().Result;
       Console.WriteLine($"Value returned from the async operation: {value}");
       Console.WriteLine("About to exit the program");
   }

   private static async Task<int> WaitTwoSeconds()
   {
      await Task.Delay(2000);
      Console.WriteLine("Returning from an asynchronous method");
      return 100;
   }
}
// The example displays the following output:
//       About to wait two seconds
//       Returning from an asynchronous method
//       Value returned from the async operation: 100
//       About to exit the program

참고 항목