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 quemainsea asíncrono. -
La función
spawncrea una “tarea” simultánea. -
Nota:
spawnutiliza unFuture, no se llama a.awaitencount_to.
Más información:
-
¿Por qué
count_tono suele llegar a 10? Se trata de un ejemplo de cancelación asíncrona.tokio::spawndevuelve un controlador que puede esperarse hasta que termine. -
Prueba
count_to(10).awaiten lugar de usar spawn. -
Intenta esperar a la correción de la tarea de
tokio::spawn.