Spec Sistemas Com Rust • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 18.1 — Runtime Tokio com #[tokio::main] e Função async

Contexto: Runtime Tokio com #[tokio::main] e Função async no contexto de Programação Assíncrona com Runtime Tokio e Async/Await.

Requisitos de Execução:

  1. Configurar função principal assíncrona executando tarefas com tokio::time::sleep.

Resultado Esperado

Runtime Tokio assíncrono inicializado com sucesso.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_18_1_SeuNome
  2. Envie na tarefa: Atividade Cap 18 - Programação Assíncrona com Runtime Tokio e Async/Await
🔑 Gabarito de Código & Solução Comentada
// tokio_main.rs
#[tokio::main]
async fn main() {
    println!("Iniciando runtime assincrono Tokio...");
    tokio::time::sleep(tokio::time::Duration::from_millis(100)).await;
    println!("Operacao assincrona concluida!");
}

🔍 Nível 2: Prática

Problema 18.2 — Concorrência com tokio::spawn() e Green Threads

Contexto: Concorrência com tokio::spawn() e Green Threads no contexto de Programação Assíncrona com Runtime Tokio e Async/Await.

Requisitos de Execução:

  1. Disparar múltiplas tarefas assíncronas concorrentes gerenciadas pelo scheduler multithread do Tokio.

Resultado Esperado

Tarefas assíncronas executadas em paralelo sem bloquear threads do sistema.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_18_2_SeuNome
  2. Envie na tarefa: Atividade Cap 18 - Programação Assíncrona com Runtime Tokio e Async/Await
🔑 Gabarito de Código & Solução Comentada
// tokio_spawn.rs
#[tokio::main]
async fn main() {
    let mut tarefas = vec![];
    for i in 1..=3 {
        tarefas.push(tokio::spawn(async move {
            format!("Tarefa {} concluida", i)
        }));
    }
    for t in tarefas {
        println!("{}", t.await.unwrap());
    }
}

⚡ Nível 3: Integração

Problema 18.3 — Junção de Futuros Concorrentes com tokio::join! e select!

Contexto: Junção de Futuros Concorrentes com tokio::join! e select! no contexto de Programação Assíncrona com Runtime Tokio e Async/Await.

Requisitos de Execução:

  1. Executar chamadas em paralelo aguardando todas com tokio::join!(fut1, fut2).

Resultado Esperado

Duas operações assíncronas executadas simultaneamente.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_18_3_SeuNome
  2. Envie na tarefa: Atividade Cap 18 - Programação Assíncrona com Runtime Tokio e Async/Await
🔑 Gabarito de Código & Solução Comentada
// tokio_join.rs
async fn carregar_perfil() -> &'static str { "Perfil OK" }
async fn carregar_saldo() -> &'static str { "Saldo OK" }

#[tokio::main]
async fn main() {
    let (perfil, saldo) = tokio::join!(carregar_perfil(), carregar_saldo());
    println!("Dados carregados: {}, {}", perfil, saldo);
}

🏆 Nível 4: Desafio Corporativo

Problema 18.4 — Canais Assíncronos tokio::sync::mpsc com Backpressure

Contexto: Canais Assíncronos tokio::sync::mpsc com Backpressure no contexto de Programação Assíncrona com Runtime Tokio e Async/Await.

Requisitos de Execução:

  1. Criar canal assíncrono limitado (Bounded Channel) aplicando controle de fluxo e backpressure entre serviços.

Resultado Esperado

Canal assíncrono operando com backpressure prevenindo exaustão de memória.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_18_4_SeuNome
  2. Envie na tarefa: Atividade Cap 18 - Programação Assíncrona com Runtime Tokio e Async/Await
🔑 Gabarito de Código & Solução Comentada
// tokio_channel.rs
#[tokio::main]
async fn main() {
    let (tx, mut rx) = tokio::sync::mpsc::channel(100);
    tx.send("EVENTO_ASSINCRONO").await.unwrap();
    if let Some(msg) = rx.recv().await {
        println!("Mensagem assincrona recebida: {}", msg);
    }
}

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos