컴파일러 오류 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
.NET 피드백
.NET은(는) 오픈 소스 프로젝트입니다. 다음 링크를 선택하여 피드백을 제공해 주세요.