Sont asynchrones console applications prises en charge en .NET de Base?
À un certain point dans le temps CoreCLR pris en charge async principaux points d'entrée. Voir http://blog.stephencleary.com/2015/03/async-console-apps-on-net-coreclr.html
Toutefois, les programmes suivants ne sont pas de travail .NET de Base 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 statique Principale méthode appropriée pour un point d'entrée
Sont asynchrones console applications prises en charge en .NET de Base RTM?
- Notez que
async Main
de soutien est prévue actuellement pour le C# 7.0. - en fait async Principal soutien a été ajouté en c# 7.1, docs.microsoft.com/en-us/dotnet/csharp/whats-new/... - Dans votre visual studio 2017 projet, allez dans les propriétés du projet -> build -> avancé, puis changer la langue de votre version 7.1 (ou ultérieure)
- N'oubliez pas de changer
properties -> build -> advanced -> language version
pour le Debug ET Release construire des types, d'autre projet échouera sur Publier. - Dans mon projet, "asynchrone Principal" ne fonctionne que si j'ai utilisé de la Tâche au lieu de void. Avec le vide, j'ai reçu l'erreur "CS5001'.
- Double Possible de Can spécifiez pas le "asynchrone" modificateur sur le "Principal" la méthode de l'application console
Vous devez vous connecter pour publier un commentaire.
Oui, le
async Main
fonctions sont prises en charge depuis.NET Core 2.0
.Le soutien à la
async Main
fonctions est introduit dans C# version 7.1. Cependant, cette fonctionnalité n'est pas disponible hors de la boîte. Pour utiliser cette fonctionnalité, vous devez explicitement spécifier la version de C# 7.1 dans votre.csproj
fichier, soit en incluantou par
Par exemple pour la ASP.NET core 2.0 projet:
où la fonction Principale peut être réécrit comme suit:
Références:
Mise à jour: Async principal est supporté en natif par C# 7.1! Voir Evgeny de réponse ci-dessus.
Je vais garder la solution de contournement ci-dessous pour la postérité, mais il n'est plus nécessaire.
async main
est plus simple.Comme Nick l'a dit, le soutien à cette a été supprimé. C'est mon préféré de solution de contournement:
GetAwaiter().GetResult()
est le même que.Wait
(blocage de manière synchrone), mais est préféré parce qu'il y a des exceptions.Il y a une proposition pour l'ajout de
async Main()
pour une future version de C#: csharplang#97Soutien pour async points d'entrée a été retiré d'un moment de retour.
Voir ce problème sur le aspnet/annonces github.