À un moment donné, CoreCLR a pris en charge les principaux points d'entrée asynchrones. Voir http://blog.stephencleary.com/2015/03/async-console-apps-on-net-coreclr.html
Cependant, les deux programmes suivants ne fonctionnent pas dans .NET Core RTM
using System;
using System.Threading.Tasks;
namespace ConsoleApplication
{
public class Program
{
public static async Task Main(string[] args)
{
await Task.Delay(1000);
Console.WriteLine("Hello World!");
}
}
}
ou
using System;
using System.Threading.Tasks;
namespace ConsoleApplication
{
public class Program
{
public async Task Main(string[] args)
{
await Task.Delay(1000);
Console.WriteLine("Hello World!");
}
}
}
Ces deux échouent avec l'erreur:
erreur CS5001: le programme ne contient pas de méthode statique «principale» adaptée à un point d'entrée
Les applications de console asynchrone sont-elles prises en charge dans .NET Core RTM?
async Main
support est actuellement prévu pour C # 7.0 .properties -> build -> advanced -> language version
types de build Debug AND Release, sinon le projet échouera lors de la publication.Réponses:
Oui, les
async Main
fonctions sont supportées depuis.NET Core 2.0
.La prise en charge des
async Main
fonctions est introduite dans C # version 7.1. Cependant, cette fonctionnalité n'est pas disponible par défaut. Pour utiliser cette fonctionnalité, vous devez spécifier explicitement la version C # 7.1 dans votre.csproj
fichier, soit en incluantou par
Par exemple pour le projet ASP.NET core 2.0:
où la fonction principale peut être réécrite comme suit:
Références:
la source
Mise à jour : Async main est supporté nativement par C # 7.1! Voir la réponse d'Evgeny ci-dessus.
Je vais garder la solution de contournement ci-dessous pour la postérité, mais elle n'est plus nécessaire.
async main
est bien plus simple.Comme Nick l'a dit, le support pour cela a été supprimé. C'est ma solution de contournement préférée:
GetAwaiter().GetResult()
est identique à.Wait
(blocage synchrone), mais il est préférable car il déballe les exceptions.Il existe une proposition d'ajout
async Main()
à une future version de C #: csharplang # 97la source
La prise en charge des points d'entrée asynchrones a été supprimée il y a quelque temps.
Consultez ce problème sur le github aspnet / annonces.
la source