Ошибка компилятора CS4009
Type.Method: точка входа не может быть помечена модификатором async
.
Вы не можете использовать async
ключевое слово в точке входа приложения (как правило, Main
метод).
Важно!
Начиная с C# 7.1 Main
метод может иметь async
модификатор. Дополнительные сведения см. в разделе Async main return values. Сведения о выборе версии языка 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 — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв: