Tokio
Tokio fornece:
- Um runtime multi-threaded para executar código assíncrono.
- Uma versão assíncrona da biblioteca padrão.
- Um grande ecossistema de bibliotecas.
use tokio::time;
async fn count_to(count: i32) {
for i in 1..=count {
println!("Contador na tarefa: {i}!");
time::sleep(time::Duration::from_millis(5)).await;
}
}
#[tokio::main]
async fn main() {
tokio::spawn(count_to(10));
for i in 1..5 {
println!("Tarefa principal: {i}");
time::sleep(time::Duration::from_millis(5)).await;
}
}
-
Com a macro
tokio::mainagora podemos tornarmainasync. -
A função
spawncria uma nova “tarefa” concorrente. -
Nota:
spawnrecebe umaFuture, você não chama.awaitemcount_to.
Exploração adicional:
-
Por que
count_to(geralmente) não chega a 10? Este é um exemplo de cancelamento async.tokio::spawnretorna um handle que pode ser aguardado para esperar que ele termine. -
Tente
count_to(10).awaitem vez de spawn. -
Tente aguardar a tarefa retornada de
tokio::spawn.