Async/Await é um par de palavras-chave que permite escrever código assíncrono com aparência síncrona, abstraindo callbacks e cadeias de Promises. Foi introduzido originalmente no C# 5.0 em 2012 pela Microsoft, adotado pelo Python 3.5 em 2015 (PEP 492) e padronizado no JavaScript com o ECMAScript 2017 (ES8). Hoje é o modelo dominante para orquestrar operações concorrentes em linguagens modernas como TypeScript, Rust, Swift, Kotlin e Dart.
TL;DR
- O que é: açúcar sintático sobre Promises (JS), Tasks (C#) ou coroutines (Python) para escrever código assíncrono como se fosse síncrono.
- Por que importa: elimina o callback hell, melhora legibilidade e preserva stack traces para debugging.
- Quando usar: em operações de I/O (requisições HTTP, leitura de arquivos, consultas em banco) e qualquer tarefa não bloqueante.
Como funciona Async/Await?
Async/Await é um modelo de execução cooperativa que suspende a função atual enquanto aguarda a conclusão de uma operação assíncrona, sem bloquear a thread principal. A palavra-chave async transforma uma função em uma função assíncrona que retorna uma Promise (JavaScript), Task (C#) ou coroutine (Python). O await pausa a execução até que o valor esteja disponível, liberando o event loop para processar outras tarefas enquanto a operação pendente completa. É açúcar sintático sobre Promises e Futures, não um novo mecanismo de execução.
Para que serve Async/Await?
Async/Await serve para gerenciar operações concorrentes de I/O sem bloquear a execução principal da aplicação. É amplamente usado em requisições de rede, acesso a disco, consultas a banco de dados e qualquer processamento de I/O. Em servidores Node.js, por exemplo, permite atender milhares de conexões simultâneas com apenas uma thread. Em frameworks Python como FastAPI, viabiliza endpoints que mantêm latência baixa mesmo com alto volume de requisições concorrentes.
Exemplos de Async/Await na prática
JavaScript (ES2017+):
async function buscarUsuario(id) {
const resposta = await fetch(`/api/usuarios/${id}`);
return resposta.json();
}
Python (3.5+):
import asyncio
import aiohttp
async def buscar(url):
async with aiohttp.ClientSession() as sessao:
async with sessao.get(url) as resp:
return await resp.text()
asyncio.run(buscar('https://api.exemplo.com'))
C#:
public async Task<string> BaixarAsync(string url) {
using var cliente = new HttpClient();
return await cliente.GetStringAsync(url);
}
Padrões úteis com Async/Await
- Paralelismo:
Promise.all(JS),asyncio.gather(Python),Task.WhenAll(C#) executam várias operações em paralelo. - Timeout:
AbortControllerem JavaScript,asyncio.wait_forem Python,CancellationTokenem C#. - Retry com backoff: tentar novamente operações que falharem com atraso exponencial.
- Limite de concorrência: bibliotecas como
p-limitem Node.js easyncio.Semaphoreem Python evitam sobrecarregar APIs externas.
Erros comuns com Async/Await
Os deslizes mais frequentes incluem: esquecer o await e usar a Promise crua em comparações, sequenciar operações independentes dentro de um laço quando poderiam ser paralelizadas com Promise.all, usar async dentro de .map() sem envolver em Promise.all, omitir ConfigureAwait(false) em bibliotecas .NET gerando deadlocks, e bloquear o event loop com operações CPU-bound que deveriam rodar em worker threads.
Async/Await e a Shiftmind
A Shiftmind utiliza padrões Async/Await em integrações assíncronas de projetos de criação de sites WordPress com APIs externas, otimizando a performance de carregamento e a resiliência do site. Para hospedar aplicações que exigem alta concorrência, conheça a Hospedagem WordPress e o Servidor Dedicado da Shiftmind. Clientes B2B contam ainda com suporte e manutenção WordPress especializado e automação integrada via Marketing Digital B2B 4.0.
Perguntas frequentes sobre Async/Await
Async/Await substitui Promises?
Não. Em JavaScript, Async/Await é açúcar sintático sobre Promises — toda função async retorna uma Promise automaticamente, e await apenas facilita o consumo. Em Python trabalha com coroutines, em C# com Tasks. Os três conceitos coexistem.
Qual a diferença entre async e sync?
Código síncrono executa linha por linha bloqueando a thread. Código assíncrono com Async/Await suspende a execução durante operações de I/O, liberando a thread para outras tarefas, e retoma quando o resultado estiver pronto. Em servidores, isso aumenta drasticamente o throughput.
Posso usar Async em todas as linguagens?
As principais com suporte nativo são JavaScript, TypeScript, Python, C#, Rust, Swift, Kotlin e Dart. Go usa goroutines e channels como alternativa, e Java moderno oferece virtual threads (Project Loom) além de CompletableFuture.
Async/Await torna o código mais rápido?
Não aumenta a velocidade de operações individuais, mas melhora o throughput em operações de I/O. Permite executar múltiplas requisições em paralelo comPromise.all ou asyncio.gather, reduzindo o tempo total de espera.
Termos relacionados
- AJAX
- API REST
- Arquitetura Event-Driven
- Algoritmo
- Assertion
Para o guia completo com exemplos em JavaScript, Python e C#, veja o artigo detalhado sobre Async/Await no blog da Shiftmind.



