Erreur du compilateur CS4009
'Type.Method' : un point d’entrée ne peut pas être marqué avec le modificateur async
.
Vous ne pouvez pas utiliser le mot clé async
dans le point d’entrée de l’application (généralement la méthode Main
).
Important
À compter de C# 7.1, la méthode Main
peut comporter un modificateur async
. Pour plus d’informations, consultez Valeurs de retour principales asynchrones. Pour savoir comment sélectionner la version du langage C#, voir l’article Sélectionner la version du langage C#.
L’exemple suivant produit l’erreur 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");
}
}
Mettez à jour la version du langage C# utilisée par le projet vers la version 7.1 ou ultérieure.
Si vous utilisez C# 7.0 ou une version antérieure, supprimez le mot clé async
de la signature du point d’entrée de l’application. Supprimez également les mots clés await
que vous avez utilisés pour attendre des méthodes asynchrones dans votre point d’entrée d’application.
Toutefois, vous devez toujours attendre que la méthode asynchrone se termine avant que votre point d’entrée reprenne l’exécution. Sinon, la compilation génère l’avertissement du compilateur CS4014 et l’application se termine avant la fin de l’opération asynchrone. L'exemple de code suivant illustre ce problème :
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
Pour attendre une méthode qui renvoie une Task, appelez sa méthode Wait, comme l’illustre l’exemple suivant :
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
Pour attendre une méthode qui renvoie une Task<TResult>, récupérez la valeur de sa propriété Result, comme dans l’exemple suivant :
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
Commentaires sur .NET
.NET est un projet open source. Sélectionnez un lien pour fournir des commentaires :