В какой-то момент CoreCLR поддерживал основные точки входа async. См. Http://blog.stephencleary.com/2015/03/async-console-apps-on-net-coreclr.html
Однако обе следующие программы не работают в .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!");
}
}
}
или
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!");
}
}
}
Оба они терпят неудачу с ошибкой:
ошибка CS5001: Программа не содержит статического метода Main, подходящего для точки входа
Поддерживаются ли консольные асинхронные приложения в .NET Core RTM?
async Main
в настоящее время планируется поддержка C # 7.0 .properties -> build -> advanced -> language version
типы сборки Debug AND Release, иначе проект не удастся опубликовать.Ответы:
Да,
async Main
функции поддерживаются с тех пор.NET Core 2.0
.Поддержка
async Main
функций представлена в C # версии 7.1. Однако эта функция недоступна по умолчанию. Чтобы использовать эту функцию, вам необходимо явно указать C # версии 7.1 в вашем.csproj
файле, либо включивили по
Например, для проекта ASP.NET core 2.0:
где функцию Main можно переписать следующим образом:
Ссылки:
источник
Обновление : Async main изначально поддерживается C # 7.1! См. Евгения Ответ выше.
Я сохраню описанный ниже обходной путь для потомков, но он больше не нужен.
async main
путь проще.Как сказал Ник, поддержка этого была удалена. Это мой предпочтительный обходной путь:
GetAwaiter().GetResult()
то же самое, что.Wait
(блокировка синхронно), но предпочтительнее так как разворачивает исключения.Есть предложение добавить
async Main()
в будущую версию C #: csharplang # 97источник
Некоторое время назад поддержка асинхронных точек входа была удалена.
См. Эту проблему в aspnet / объявлениях github.
источник