Spec Sistemas Csharp • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 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:

  1. Simular chamada de I/O assíncrona com await Task.Delay(100) retornando Task<string>.

Resultado Esperado

Execução assíncrona não-bloqueante concluída no thread pool.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_17_1_SeuNome
  2. 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:

  1. Passar CancellationToken para 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)

  1. Salve o arquivo como: Atividade_17_2_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_17_3_SeuNome
  2. 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 para Otimização de Caminhos Síncronos sem Alocação no contexto de Programação Assíncrona com async/await, Task e CancellationToken.

Requisitos de Execução:

  1. Retornar ValueTask<string> quando o dado já estiver em cache, evitando a alocação de um objeto Task no heap.

Resultado Esperado

Retorno de cache otimizado com zero alocação através de ValueTask.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_17_4_SeuNome
  2. 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