🧩 Exercícios: Programação Assíncrona com async/await, Task e CancellationToken
Spec Sistemas Csharp • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 Nível 1: Fundamentos
Problema 17.1 — Método Assíncrono com Task e Palavra-chave await
Contexto: Método Assíncrono com Task e Palavra-chave await no contexto de Programação Assíncrona com async/await, Task e CancellationToken.
Requisitos de Execução:
- Simular chamada de I/O assíncrona com
await Task.Delay(100)retornandoTask<string>.
Resultado Esperado
Execução assíncrona não-bloqueante concluída no thread pool.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_17_1_SeuNome - Envie na tarefa:
Atividade Cap 17 - Programação Assíncrona com async/await, Task e CancellationToken
🔑 Gabarito de Código & Solução Comentada
// AsyncBasics.cs
async Task<string> BuscarDadosAsync() {
await Task.Delay(100);
return "DADOS_CARREGADOS";
}
string resultado = await BuscarDadosAsync();
Console.WriteLine($"Status: {resultado}");
🔍 Nível 2: Prática
Problema 17.2 — Cancelamento Cooperativo com CancellationTokenSource
Contexto: Cancelamento Cooperativo com CancellationTokenSource no contexto de Programação Assíncrona com async/await, Task e CancellationToken.
Requisitos de Execução:
- Passar
CancellationTokenpara método assíncrono e solicitar cancelamento após timeout.
Resultado Esperado
Operação assíncrona cancelada cooperativamente sem vazamento de threads.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_17_2_SeuNome - Envie na tarefa:
Atividade Cap 17 - Programação Assíncrona com async/await, Task e CancellationToken
🔑 Gabarito de Código & Solução Comentada
// CancellationTokenDemo.cs
using var cts = new CancellationTokenSource();
cts.CancelAfter(50); // Cancela em 50ms
try {
await Task.Delay(500, cts.Token);
} catch (OperationCanceledException) {
Console.WriteLine("Operacao cancelada com sucesso via CancellationToken.");
}
⚡ Nível 3: Integração
Problema 17.3 — Execução Paralela com Task.WhenAll e Task.WhenAny
Contexto: Execução Paralela com Task.WhenAll e Task.WhenAny no contexto de Programação Assíncrona com async/await, Task e CancellationToken.
Requisitos de Execução:
- Disparar 3 requisições assíncronas concorrentes e aguardar a conclusão simultânea com
Task.WhenAll.
Resultado Esperado
Três tarefas assíncronas executadas em paralelo com agregação de resultados.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_17_3_SeuNome - Envie na tarefa:
Atividade Cap 17 - Programação Assíncrona com async/await, Task e CancellationToken
🔑 Gabarito de Código & Solução Comentada
// TaskWhenAllDemo.cs
Task<int> t1 = Task.FromResult(10);
Task<int> t2 = Task.FromResult(20);
Task<int> t3 = Task.FromResult(30);
int[] resultados = await Task.WhenAll(t1, t2, t3);
Console.WriteLine($"Soma das Tasks: {resultados.Sum()}");
🏆 Nível 4: Desafio Corporativo
Problema 17.4 — ValueTask para Otimização de Caminhos Síncronos sem Alocação
Contexto: ValueTask
Requisitos de Execução:
- Retornar
ValueTask<string>quando o dado já estiver em cache, evitando a alocação de um objetoTaskno heap.
Resultado Esperado
Retorno de cache otimizado com zero alocação através de ValueTask.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_17_4_SeuNome - Envie na tarefa:
Atividade Cap 17 - Programação Assíncrona com async/await, Task e CancellationToken
🔑 Gabarito de Código & Solução Comentada
// ValueTaskDemo.cs
ValueTask<string> ObterDoCache(bool emCache) {
if (emCache) return new ValueTask<string>("VALOR_CACHEADO"); // Zero alocação
return new ValueTask<string>(Task.FromResult("VALOR_BANCO"));
}
string valor = await ObterDoCache(true);
Console.WriteLine($"Resultado ValueTask: {valor}");
| ⬅️ Voltar ao Índice de Exercícios | 📚 Sumário de Tópicos |