Método Main asíncrono disponible en C# 7.1

Punto de entrada Main

En .Net podemos crear programas con o sin un punto de entrada. Si tenemos un punto de entrada, el sistema operativo podrá cargar y ejecutar su código, y si no lo tenemos, el sistema operativo no podrá directamente ejecutar el programa, más bien será otro programa el que referencie nuestro código y sea él quien lo ejecute.

En C# definimos nuestro punto de entrada con un método Main declarado dentro de una clase o estructura no estática. Además, el método debe ser estático y no público. El valor devuelto puede ser int o void. De forma opcional se pueden especificar argumentos de entrada en forma de array de strings string[]. Así pues, estas son las posibles firmas que se pueden utilizar:

Punto de entrada asíncrono en C# 7.1

Con la aparición de las palabras clave async y await para la creación de métodos asíncronos y su gran adopción por parte de la comunidad, se extiende la forma en que podemos crear nuestro punto de entrada para que sea compatible con esta característica. De esta forma la lista de firmas posibles para nuestro punto de entrada es ampliada con sus versiones asíncronas:

Si por ejemplo creamos una aplicación de consola con un método Main síncrono que intente utilizar una Api asíncrona, como por ejemplo leer un archivo con un método ReadAsync, obtendremos un error de compilación:

El operador 'await' solo se puede usar dentro de un método asincrónico. Puede marcar este método con el modificador 'async' y cambiar su tipo de valor devuelto a 'Task'.
Sin embargo, si usamos una firma asíncrona del método Main desaparecerá el error de compilación y el método ReadAsync será invocado de forma asíncrona:

Nota sobre Visual Studio 2017 y C# 7.1

Si intentamos lanzar el programa y obtenemos el siguiente error es porque estamos utilizando una versión de C# anterior a la C# 7.1 y no reconoce el método Main como válido: El programa no contiene ningún método 'Main' estático adecuado para un punto de entrada Aunque C# 7.1 está disponible con Visual Studio 2017 Update 3, sus nuevas funcionalidades no están disponibles por defecto. Tendremos que modificar la configuración del proyecto de forma manual. Esto lo podemos realizar abriendo las propiedades del proyecto, selecionando la pestaña Build, haciendo clic en el botón Advanced y seleccionando de la lista C# 7.1.
Written on May 1, 2018