async/await
En general, el código asíncrono de Rust se parece mucho al código secuencial “normal”:
use futures::executor::block_on;
async fn count_to(count: i32) {
for i in 1..=count {
println!("El recuento es: ¡{i}!");
}
}
async fn async_main(count: i32) {
count_to(count).await;
}
fn main() {
block_on(async_main(10));
}
Puntos clave:
-
Ten en cuenta que este es un ejemplo simplificado para mostrar la sintaxis. No hay ninguna operación de larga duración ni concurrencia real.
-
¿Cuál es el tipo de resultado devuelto de una llamada asíncrona?
- Consulta el tipo con
let future: () = async_main(10);enmain.
- Consulta el tipo con
-
The “async” keyword is syntactic sugar. The compiler replaces the return type with a future.
-
No se puede hacer que
mainsea asíncrono sin dar instrucciones adicionales al compilador sobre cómo usar el futuro devuelto. -
You need an executor to run async code.
block_onblocks the current thread until the provided future has run to completion. -
.awaitespera de forma asíncrona la finalización de otra operación. A diferencia deblock_on,.awaitno bloquea el hilo. -
.awaitcan only be used inside anasyncfunction (or block; these are introduced later).