En algún momento, CoreCLR admitió puntos de entrada principales asíncronos. Ver http://blog.stephencleary.com/2015/03/async-console-apps-on-net-coreclr.html
Sin embargo, los dos programas siguientes no funcionan en .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!");
}
}
}
o
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 fallan con el error:
error CS5001: el programa no contiene un método 'principal' estático adecuado para un punto de entrada
¿Las aplicaciones de consola asíncronas son compatibles con .NET Core RTM?
async Main
actualmente se prevé la compatibilidad con C # 7.0 .properties -> build -> advanced -> language version
tipos de compilación Debug AND Release, de lo contrario, el proyecto fallará en Publish.Respuestas:
Sí, las
async Main
funciones son compatibles desde.NET Core 2.0
.El soporte para las
async Main
funciones se introduce en la versión 7.1 de C #. Sin embargo, esta funcionalidad no está disponible de forma inmediata. Para hacer uso de esta función, debe especificar explícitamente la versión 7.1 de C # en su.csproj
archivo, ya sea incluyendoo por
Por ejemplo, para el proyecto ASP.NET core 2.0:
donde la función principal se puede reescribir de la siguiente manera:
Referencias:
fuente
Actualización : ¡Async main es compatible de forma nativa con C # 7.1! Vea la respuesta de Evgeny arriba.
Conservaré la siguiente solución alternativa para la posteridad, pero ya no es necesaria.
async main
es mucho más sencillo.Como dijo Nick, se eliminó el apoyo a esto. Esta es mi solución alternativa preferida:
GetAwaiter().GetResult()
es lo mismo que.Wait
(bloquear sincrónicamente), pero se prefiere porque desenvuelve las excepciones.Hay una propuesta para agregar
async Main()
a una versión futura de C #: csharplang # 97fuente
El soporte para puntos de entrada asíncronos se eliminó hace un tiempo.
Vea este problema en el github de aspnet / anuncios.
fuente