C# - Usando Async Main
Hoje vamos discutir a utilização do Async Main na linguagem C#. |
Existem dois tipos de programas que o compilador de linguagem C# pode criar :
O método Main no C#
Um programa na linguagem C# é iniciado no método Main com as seguintes propriedades.
Existem quatro versões sobrecarregadas que são consideradas assinaturas válidas para o método Main em C# :
public static void Main(); public static int Main(); public static void Main(string[] args); public static int Main(string[] args); |
Antes da versão 7.1 do C#, quando queríamos chamar o método assíncrono de dentro do método Main(), precisávamos adicionar algum código, mas agora o compilador C# faz isso por nós.
Vamos entender como chamar o método assíncrono Main em C# antes da versão 7.1 com um exemplo:
static void Main(string[] args)
{
Console.WriteLine("Antes do C# 7.1, Para usar o método async");
Console.WriteLine($"Execução do Main iniciou em : {System.DateTime.Now}");
Task.Delay(2000).GetAwaiter().GetResult();
Console.WriteLine($"Execução do Main terminou em : {System.DateTime.Now}");
Console.ReadKey();
}
|
Resultado obtido:
Assim o ponto de entrada , ou método Main não podia ser assíncrono.
É claro que você podia driblar essa limitação criando um outro método assíncrono chamando Wait:
Mas agora isso não é mais necessário....
Como ficou o Main assíncrono a partir do C# 7.1 ?
A partir da versão 7.1, o método Main(), que é o ponto de entrada do aplicativo, pode ser declarado como assíncrono (async)
Antes da
versão 7.1, o método Main() podia ter um tipo de
retorno como void ou int; no entanto, agora, ele
também suporta os tipos Task e Task<int>.
Portanto, agora temos oito versões de sobrecarga consideradas como assinaturas
válidas para o método Main() :
public static void Main(); public static int Main(); public static void Main(string[] args); public static int Main(string[] args); public static Task Main(); public static Task<int> Main(); public static Task Main(string[] args); public static Task<int> Main(string[] args); |
E agora podemos fazer assim:
No código acima estamos incluindo um atraso de 2 segundos ao programa com Task.Delay(2000), e, estamos usando await e async no método Main.
Assim, a sintaxe na versão 7.1 é mais simples e fácil de usar. No exemplo acima, vemos como podemos usar Task com Main.
Vejamos a seguir um exemplo usando Task<int> :
using System;
using System.Threading.Tasks;
namespace CShp_MainAsync
{
class Program
{
public static async Task<int> Main(string[] args)
{
Console.Title = "Main usando async Task<int>";
int numero1 = 15, numero2 = 20;
Console.WriteLine($"Soma de {numero1} com {numero2} = " +
$"{await SomarAsync(numero1, numero2)}");
Console.ReadKey(); return 0; } private static Task<int> SomarAsync(int n1, int n2) { return Task.Run(() => Somar(n1, n2)); //função local int Somar(int x, int y) { return x + y; } } } } |
Resultado obtido:
Neste código estamos usando async e await no método Main com Task<int>, chamando um método assíncrono onde definimos uma função local que é um dos novos recursos do C# 7.0.
Aguarde mais artigos sobre a linguagem C#.
Mateus 24:14
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
C# - StreamReader, StringReader e TextReader . Qual a ... - Macoratti
C# - Imprimindo um arquivo texto - Macoratti
C# - Usando OpenFileDialog - Macoratti
C# - Formatando arquivos textos - Macoratti
C# - Convertendo valores para o formato monetário
C# - Lendo e escrevendo em arquivos textos e binários - Macoratti
VB.NET - Conversão entre tipos de variáveis - Macoratti
C# - Localizando Arquivos - Macoratti