Tokio

Tokio provides:

  • Un tiempo de ejecución multihilo para ejecutar código asíncrono.
  • Una versión asíncrona de la biblioteca estándar.
  • Un amplio ecosistema de bibliotecas.
use tokio::time;

async fn count_to(count: i32) {
    for i in 1..=count {
        println!("Recuento en la tarea: {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!("Tarea principal: {i}");
        time::sleep(time::Duration::from_millis(5)).await;
    }
}
  • Con la macro tokio::main, podemos hacer que main sea asíncrono.

  • La función spawn crea una "tarea" simultánea.

  • Nota: spawn utiliza un Future, no se llama a .await en count_to.

Más información:

  • ¿Por qué count_to no suele llegar a 10? Se trata de un ejemplo de cancelación asíncrona. tokio::spawn devuelve un controlador que puede esperarse hasta que termine.

  • Prueba count_to(10).await en lugar de usar spawn.

  • Intenta esperar a la correción de la tarea de tokio::spawn.