Dev (Back & Front)ARTIGO

Novidades do C# 7.1: Async Main

Continuando a série de artigos com as novidades do C#, o autor apresenta o Aync Main

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

Arquiteto e desenvolvedor, agilista, pai, filho, escalador, ciclista, quebrador de status quo, Microsoft MVP. Escreve artigos, fundou o .Net Architects, mantém o podcast Tecnoretórica e da Lambda3, um blog e muitos projetos no Github. É agilista, e trouxe os programas da Scrum.org pro Brasil. Criou a Lambda3, que insiste em fazer projetos e consultoria direito.

Ver perfil