O Drama das Operações Assíncronas na Web
Achou que era só colocar um "async" para acelerar sua aplicação? Grande engano! Vamos ver o que realmente acontece com as operações assíncronas no IIS.
Na primeira parte, falamos sobre sincronia e assincronia. Agora, é hora de ver isso na prática.
- Quando usar async? Em teoria, para operações de IO.
- HTTP é assíncrono? Não, HTTP é síncrono.
- Então, como ele responde a várias requisições? Quem faz isso é o browser. O IIS é que teria que ser assíncrono.
- Se o IIS é assíncrono, por que usar
async Task
nas Controllers? Para escalabilidade, dizem...
Antes, falamos de como o IIS recebe as requisições. Agora, veja como funciona a assíncronicidade.
Entrando no Caos Assíncrono
Programação assíncrona é como a esteira da academia: todo mundo vê, poucos sabem usar.
O Mundo .NET: Async/Await
Introduzido no .NET Framework 4.5, async e await prometem alegria assíncrona, mas o segredo é o Task-based Asynchronous Pattern (TAP).
Benefícios
Para aplicações Desktop, o grande benefício do async é não travar a interface. No Backend, o truque é a escalabilidade.
O Role do IIS nas Requisições—Onde a Coisa Pega
O IIS usa um Worker Process—daí as coisas podem embolar com operações síncronas.
Síncrono: O Tédio
Imagina uma requisição esperando o banco voltar das férias. É isso, a Thread está bloqueada!
Assíncrono: A Esperança
O código assíncrono promete acabar com bloqueios de Thread. Ele libera até o I/O terminar e fica ali, na esperança.
Quando o Async Não Dá Conta
O async não resolve tudo. Confira os casos onde ele é um desastre.
Requisições que Usam Muita CPU
Se a requisição usa muita CPU, async não ajuda. async
+ await
só complicam o código à toa.
Problemas de Banco de Dados
Se o banco engasgar, jogar async
é como botar lenha na fogueira.
SHOW ME THE CODE: Rápido e Furioso
Finalmente, chegamos à parte prática.
O que Você Precisa
- VisualStudio 2019
- .NET Core 2.2
Vamos criar seu projeto Web API.
No Program.cs, configure bem seu Thread Pool.
Configure sua Controller para ter métodos sync e async.
Você está no ponto.
Testando o Caos
Crie um projeto Console Application e veja a bagunça ou magia.
O Teste Síncrono
8 requisições, 5 segundos cada. Difícil.
O Teste Assíncrono
Até 200 requisições, threads quase pifando. 7 segundos no total.
Baixe Sob Sua Responsabilidade
O código completo está no meu GitHub.
Conclusão: O Desafio do Async no ASP.NET
Este não é um guia para os fracos—o async no ASP.NET é levado ao limite.
No fim, o async promete escalabilidade.