C# 5.0 – Programação Assíncrona Async e Await

Programação Assíncrona é atualmente um dos elementos mais importantes no desenvolvimento de software, um cliente ao navegar por uma aplicação deseja ter uma experiência rica e responsiva, para entregar essa experiência foi introduzido no C# 5.0 uma nova sintaxe simplificada e direta, anteriormente trabalhar com multithread era uma tarefa complexa que exigia muitas linhas de código, agora neste novo modelo tornou-se simples. 

Antes de aprender a utilizar a sintaxe do novo modelo de programação assíncrona é muito importante conhecermos quando utilizar programação assíncrona, programação assíncrona é comum ser utilizada ao trabalhar com imagens, arquivos, wcf ou um processo que envolve muita regra de negócio complexa que consequentemente torna-se lento.

Abaixo segue uma imagem de um modelo assíncrono evidenciando um ganho de performance de 5 segundos:


Na figura acima, T1 foi executado em paralelo a T2 e T3, como T2 e T3 representam 5 segundos então a execução de T1, T2 e T3 demorou 5 segundos, logo em um processo não assíncrono demoraria 10 segundos porque T2 teria que esperar o retorno de T1.

Entendendo na prática, abaixo foi feita uma implementação simples para que possamos entender o conceito, importante notar as palavras reservadas async e await, onde async é utilizada na declaração do método e sua função é apenas habilitar a utilização do poderoso await dentro do corpo do método, await recebe como argumento uma Task que é uma tarefa que pode executar uma ação e diz que essa ação será executada em uma thread isolada independente das demais.

No método Main temos a chamada dos métodos de forma estruturada na ordem a seguir:

FazAlgumaCoisa
Soma
Multiplica 

Devido o método FazAlgumaCoisa ser assíncrono o método Soma e Multiplicação não precisam esperar o método FazAlgumaCoisa ter um retorno, podendo rodar paralelo, o resultado da execução dessa implementação é:

O resultado da soma é : 20
O resultado da multiplicação é : 100
FazAlgumacoisa

Interessante notar que o método FazAlgumaCoisa embora tenha sido chamada primeiro foi executado por último seu processo demorou mais.

using System;
using System.Threading.Tasks;

namespace DevBrasil
{
      public class DevBrasil
      {
            public static void Main()
            {
                 var result = FazAlgumaCoisa();
                 Soma(10, 10);
                 Multiplica(10, 10);
                 Console.Read();
             }

             private static async Task FazAlgumaCoisa()
             {
                 await Task.Delay(1000);
                 Console.WriteLine("FazAlgumaCoisa");
             }

             private static void Soma(int num1, int num2)
             {
                 Console.WriteLine("O resultado da soma é : {0} ", num1 + num2);
             }

             private static void Multiplica(int num1, int num2)
             {
                 Console.WriteLine("O resultado da multiplicacao é : {0} ", num1 * num2);
             }
      }
}

Vantagem


A sintaxe é clara, basicamente constitui de apenas duas palavras reservadas, A palavra reservada await se encarrega de todo o gerenciamento da thread o que facilita o desenvolvimento, antigamente todo o gerenciamento era realizado programaticamente.


Neste artigo foi apresentado de forma simples o novo paradigma de desenvolvimento de processos assíncronos existente na linguagem C#. 


Para saber mais
Aprofunde seu conhecimento sobre C#

 

Exibições: 4328

Comentar

Você precisa ser um membro de DevBrasil para adicionar comentários!

Entrar em DevBrasil

© 2017   Criado por Ramon Durães.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço