🧩 Exercícios: Programação Assíncrona com Runtime Tokio e Async/Await
Spec Sistemas Com Rust • Trilha Progressiva em 4 Níveis
🧭 Navegação Pedagógica
-
📖 Teoria do Capítulo 💻 Exemplos 📊 Slides 🧠 Quiz
🎯 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:
- 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)
- Salve o arquivo como:
Atividade_18_1_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_18_2_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_18_3_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_18_4_SeuNome - 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 |