Em algum momento, o CoreCLR suportou pontos de entrada principais assíncronos. Consulte http://blog.stephencleary.com/2015/03/async-console-apps-on-net-coreclr.html
No entanto, os dois programas a seguir não estão funcionando no .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!");
}
}
}
Ambos falham com o erro:
erro CS5001: O programa não contém um método estático 'Principal' adequado para um ponto de entrada
Os aplicativos de console assíncronos são compatíveis com .NET Core RTM?
async Main
suporte está atualmente planejado para C # 7.0 .properties -> build -> advanced -> language version
tipos de compilação Depurar E Liberar, caso contrário, o projeto falhará na Publicação.Respostas:
Sim, as
async Main
funções são suportadas desde então.NET Core 2.0
.O suporte para as
async Main
funções é apresentado no C # versão 7.1. No entanto, essa funcionalidade não está disponível fora da caixa. Para usar este recurso, você precisa especificar explicitamente o C # versão 7.1 em seu.csproj
arquivo, incluindoou pela
Por exemplo, para o projeto ASP.NET core 2.0:
onde a função principal pode ser reescrita da seguinte forma:
Referências:
fonte
Atualização : Async main é suportado nativamente pelo C # 7.1! Veja a resposta de Evgeny acima.
Vou manter a solução alternativa abaixo para a posteridade, mas ela não é mais necessária.
async main
é muito mais simples.Como Nick disse, o suporte para isso foi removido. Esta é minha solução alternativa preferida:
GetAwaiter().GetResult()
é o mesmo que.Wait
(bloquear de forma síncrona), mas é preferível porque desvenda as exceções.Há uma proposta para adicionar
async Main()
a uma versão futura do C #: csharplang # 97fonte
O suporte para pontos de entrada assíncronos foi removido há um tempo.
Veja este problema no github aspnet / announcements.
fonte