Erro do Compilador CS4009
'Type.Method': um ponto de entrada não pode ser marcado com o modificador async
.
Você não pode usar a palavra-chave async
no ponto de entrada do aplicativo (normalmente, o método Main
).
Importante
A partir do C# 7.1, o método Main
pode ter um modificador async
. Para obter mais informações, consulte os Valores de retorno principais assíncronos. Para saber mais sobre como selecionar a versão da linguagem C#, consulte o artigo Selecionar a versão da linguagem C#.
O exemplo a seguir produz o 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");
}
}
Atualize a versão da linguagem C# usada pelo projeto para 7.1 ou superior.
Se você usar C# 7.0 ou inferior, remova a palavra-chave async
da assinatura do ponto de entrada do aplicativo. Remova também as palavras-chave await
usadas para aguardar métodos assíncronos no ponto de entrada do aplicativo.
No entanto, você ainda precisa aguardar a conclusão do método assíncrono antes que o ponto de entrada retome a execução. Caso contrário, a compilação gerará o aviso do compilador CS4014 e o aplicativo será encerrado antes da conclusão da operação assíncrona. O exemplo a seguir ilustra esse problema:
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
Para aguardar um método que retorna um Task, chame seu método Wait, como ilustra o seguinte exemplo:
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
Para aguardar um método que retorna um Task<TResult>, recupere o valor de sua propriedade Result, como o exemplo a seguir:
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
- Palavra-chave
async
- Operador
await
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários: