Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Qual o sentido de usar métodos Assíncronos?

Olá pessoal,

Eu uso métodos assíncronos com bastante frequência, pois trabalho muito com .Net Core e a maioria dos métodos de libs (O identity por exemplo) tenta forçar o desenvolvedor a usar instruções e métodos assíncronos, uso eles por inércia, mas sempre tive a dúvida, se eu tenho que usar a palavra reservada "async" para esperar a instrução terminar para só depois executar a próxima linha de código, por que usar expressões assíncronas? A ideia não seria exatamente essa, executar tarefas ao mesmo tempo? Se eu tenho que usar o async, não seria melhor deixar de usar métodos assíncronos e usar instruções não assíncronas de uma vez?

Obrigado!

2 respostas
solução!

Oi Marco, tudo bem?

Ótima pergunta. Usamos métodos async apenas quando uma tarefa irá realizar operações de I/O, como acesso à web, acesso a disco, etc. Essas operações podem demorar um tempo precioso, e se utilizarmos métodos síncronos, isso irá bloquear a thread da principal aplicação, que é a mesma responsável por renderizar a tela, atualizar controles, etc.

Sua dúvida é algo como: "por que usar async/await, se uma operação vai ser aguardada com await? Isso não é o mesmo que usar um método síncrono?"

Acontece que, quando você cria um método async que retorna uma Task<int>, isso significa que você não vai devolver um int, mas sim uma promessa de que o número int será retornado. Note que a instrução await é muito difernete de Thread.Sleep(), pois não suspende a thread. Quando o processador encontrar a instrução await no seu método, a thread que chamou o método fica livre para realizar outras tarefas, como renderizar uma janela por N quadros por segundo, responder a teclas e cliques do usuário, etc. Assim que a operação assíncrona termina, o código após a instrução await é executado. Isso é muito rápido, pois o processador tem que fazer tudo parecer simultâneo, mesmo que não seja. Se você troca o async/await por um método síncrono, a thread da aplicação se torna refém daquela operação de disco ou de acesso a web, que pode travar a interface do usuário por alguns segundos intermináveis, e dar uma sensação muito ruim ao usuário.

Perfeito Marcelo, ficou muito claro agora, essa era a questão mesmo, usar async/await, de fato isso faz todo o sentido, para uma melhor experiência do usuário não travar os controles principais e realizar os IOS, muito obrigado pelo esclarecimento!