W pewnym momencie CoreCLR obsługiwał asynchroniczne główne punkty wejścia. Zobacz http://blog.stephencleary.com/2015/03/async-console-apps-on-net-coreclr.html
Jednak oba poniższe programy nie działają w .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!");
}
}
}
lub
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!");
}
}
}
Oba kończą się niepowodzeniem z powodu błędu:
błąd CS5001: Program nie zawiera statycznej metody „Main” odpowiedniej dla punktu wejścia
Czy aplikacje konsoli asynchronicznej są obsługiwane w programie .NET Core RTM?
async Main
obecnie planowane jest wsparcie dla języka C # 7.0 .properties -> build -> advanced -> language version
typy kompilacji Debuguj i wydaj, w przeciwnym razie projekt nie powiedzie się po opublikowaniu.Odpowiedzi:
Tak,
async Main
funkcje są obsługiwane od.NET Core 2.0
.Obsługa
async Main
funkcji została wprowadzona w języku C # w wersji 7.1. Jednak ta funkcja nie jest dostępna po wyjęciu z pudełka. Aby skorzystać z tej funkcji, musisz jawnie określić C # wersję 7.1 w swoim.csproj
pliku, dołączająclub przez
Na przykład dla projektu ASP.NET core 2.0:
gdzie główną funkcję można przepisać w następujący sposób:
Bibliografia:
źródło
Aktualizacja : Async main jest obsługiwany natywnie przez C # 7.1! Zobacz odpowiedź Evgeny powyżej.
Poniższe obejście zachowam dla potomności, ale nie jest już potrzebne.
async main
jest o wiele prostsze.Jak powiedział Nick, obsługa tego została usunięta. To jest moje preferowane obejście:
GetAwaiter().GetResult()
działa tak samo jak.Wait
(blokowanie synchroniczne), ale jest preferowane, ponieważ usuwa wyjątki.Istnieje propozycja dodania
async Main()
do przyszłej wersji C #: csharplang # 97źródło
Wsparcie dla asynchronicznych punktów wejścia zostało usunięte jakiś czas temu.
Zobacz ten problem na github aspnet / Anncements.
źródło