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 tornar main async.

  • A função spawn cria uma nova "tarefa" concorrente.

  • Nota: spawn recebe uma Future, vocĂȘ nĂŁo chama .await em count_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.