Esse é o 11º artigo da série sobre C# 7, e o primeiro sobre C# 7.1. Lembrando que, para utilizar as versões minor do C# (como a 7.1, ou 7.2), você precisa habilitá-la nos atributos do projeto. Veja neste artigo como fazê-lo, e também como habilitar na solution inteira pra não ter que ficar configurando cada projeto individualmente.
Novidades do C# 7.1: Async Main
A partir da versão 7.1, o entry point da sua aplicação pode ser assíncrono. Ou seja, o método Main, que normalmente retorna void e não pode ter a palavra chave async, a partir desta versão, pode ser assíncrono.
Nesse caso, você é obrigado a retornar Task ou Task<int> (você não pode retornar void se o método estiver marcado como async).
Isso facilita muito. Antes, o que normalmente eu fazia era criar um método MainAsync e chamar .Wait(), o que não é mais necessário. Veja como ficava:
static void Main(string[] args) { MainAsync().Wait(); } static async Task MainAsync() { //faça algo assíncrono, por exemplo, ler e escrever um arquivo WriteLine(await File.ReadAllTextAsync(@"c:\temp\foo.txt")); }
E como ficou:
static async Task Main(string[] args) { //faça algo assíncrono, por exemplo, ler e escrever um arquivo WriteLine(await File.ReadAllTextAsync(@"c:\temp\foo.txt")); }
Você poderia também retornar o valor de saída 1 caso o arquivo não exista, usando Task<int>. Ficaria assim:
static async Task<int> Main(string[] args) { if (!File.Exists(@"c:\temp\foo.txt")) return 1; WriteLine(await File.ReadAllTextAsync(@"c:\temp\foo.txt")); return 0; }
Lembrando que se você esquecer de habilitar o C# 7.1 receberá o erro CS8107:
error CS8107: Feature ‘async main’ is not available in C# 7.0. Please use language version 7.1 or greater.
Você consegue ler sobre async main nos docs sobre o Main.
***
Este artigo foi produzido em parceria com a Lambda3. Leia outros conteúdos no blog da empresa: blog.lambda3.com.br