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.