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::main
agora podemos tornarmain
async. -
A função
spawn
cria uma nova “tarefa” concorrente. -
Nota:
spawn
recebe umaFuture
, você não chama.await
emcount_to
.
Exploração adicional:
-
Por que
count_to
(geralmente) não chega a 10? Este é um exemplo de cancelamento async.tokio::spawn
retorna um handle que pode ser aguardado para esperar que ele termine. -
Tente
count_to(10).await
em vez de spawn. -
Tente aguardar a tarefa retornada de
tokio::spawn
.