📊 Capítulo 17: async/await & Canais Concorrentes
Especialização em Sistemas com C#
🗺️ Como o Compilador Transforma async/await em Máquina de Estados
sequenceDiagram
autonumber
actor T as Thread do ThreadPool (Executando método assíncrono)
participant SM as StateMachine (Gerada pelo Roslyn)
participant IO as Operação de E/S de Rede / Disco
T->>SM: Chama 'await httpClient.GetStringAsync(url)'
SM->>IO: Dispara requisição assíncrona no kernel do SO
Note over T,SM: A Thread T é LIBERADA IMEDIATAMENTE de volta para o ThreadPool! ⚡
Note over T: T pode atender outros clientes HTTP enquanto a rede responde!
IO-->>SM: Kernel notifica que os dados chegaram
SM->>T: Acorda qualquer thread livre do ThreadPool para continuar de onde parou!
🎯 Slide 1: Cancelamento Cooperativo com CancellationToken
public async Task<Relatorio> GerarAsync(CancellationToken ct = default)
{
// Aborta imediatamente se o usuário fechar a aba do navegador:
ct.ThrowIfCancellationRequested();
await Task.Delay(2000, ct);
return new Relatorio();
}
🎯 Slide 2: ValueTask<T> para Otimizar o Caminho Feliz
- Quando um método assíncrono conclui frequentemente de forma síncrona (ex.: lendo de um cache em memória), o
ValueTask<T>não aloca nenhum objetoTaskno Heap, reduzindo alocações a zero!
🎯 Slide 3: System.Threading.Channels
- Filas assíncronas concorrentes de altíssima vazão (Producer-Consumer) lock-free, ideais para processamento de logs, streaming de dados e web sockets!
🔗 Navegação do Capítulo 17
| 📖 Ler Conteúdo Completo | 🧠 Fazer Quiz | 💻 Ver Exemplos | 🧩 Exercícios |
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim