Zu einem bestimmten Zeitpunkt unterstützte die CoreCLR asynchrone Haupteinstiegspunkte. Siehe http://blog.stephencleary.com/2015/03/async-console-apps-on-net-coreclr.html
Beide folgenden Programme funktionieren jedoch nicht in .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!");
}
}
}
oder
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!");
}
}
}
Diese beiden scheitern mit dem Fehler:
Fehler CS5001: Das Programm enthält keine statische 'Main'-Methode, die für einen Einstiegspunkt geeignet ist
Werden asynchrone Konsolenanwendungen in .NET Core RTM unterstützt?
async Main
derzeit Unterstützung für C # 7.0 geplant ist .properties -> build -> advanced -> language version
Build-Typen Debug AND Release zu ändern , da sonst das Projekt beim Veröffentlichen fehlschlägt.Antworten:
Ja, die
async Main
Funktionen werden seitdem unterstützt.NET Core 2.0
.Die Unterstützung für die
async Main
Funktionen wird in C # Version 7.1 eingeführt. Diese Funktionalität ist jedoch nicht sofort verfügbar. Um diese Funktion nutzen zu können, müssen Sie die C # -Version 7.1 explizit in Ihrer.csproj
Datei angeben , indem Sie entweder einschließenoder von
Zum Beispiel für das ASP.NET Core 2.0-Projekt:
Dabei kann die Hauptfunktion wie folgt umgeschrieben werden:
Verweise:
quelle
Update : Async main wird nativ von C # 7.1 unterstützt! Siehe Evgenys Antwort oben.
Ich werde die folgende Problemumgehung für die Nachwelt beibehalten, sie wird jedoch nicht mehr benötigt.
async main
ist viel einfacher.Wie Nick sagte, wurde die Unterstützung dafür entfernt. Dies ist meine bevorzugte Problemumgehung:
GetAwaiter().GetResult()
ist dasselbe wie.Wait
(synchron blockieren), wird jedoch bevorzugt, da Ausnahmen ausgepackt werden.Es gibt einen Vorschlag zum Hinzufügen
async Main()
zu einer zukünftigen Version von C #: csharplang # 97quelle
Die Unterstützung für asynchrone Einstiegspunkte wurde vor einiger Zeit entfernt.
Siehe dieses Problem auf dem Aspnet / Ankündigungen Github.
quelle