Back-End

6 fev, 2018

Novidades do C# 7.1: Async Main

Publicidade

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