Hola comunidad, estoy teniendo problemas al utilizar el operador .await en Rust. Estoy intentando realizar una llamada a una función asíncrona, pero estoy obteniendo un error y no puedo encontrar la solución. Aquí les dejo el código:
use std::time::Duration;
use tokio::time::delay_for;
async fn espera() {
delay_for(Duration::from_secs(2)).await;
println!("Espera completada.");
}
#[tokio::main]
async fn main() {
espera().await;
println!("Programa finalizado.");
}
El error que obtengo al intentar compilar el código es el siguiente:
error[E0277]: the `await` operator can only be used inside an async block
--> src/main.rs:4:28
|
4 | delay_for(Duration::from_secs(2)).await;
| ^^^^^^^^^^^^^^^^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0277`.
error: could not compile `async-await`.
¿Alguien me puede ayudar a entender y solucionar este error? ¡Gracias de antemano!
¡Hola Brisa!
El error que estás teniendo se debe a que estás utilizando una versión de tokio en la cual la función delay_for
ha sido renombrada o ya no se encuentra disponible bajo ese nombre. En su lugar, deberías usar sleep
. Además, asegúrate de tener la versión más reciente de tokio incluida en tu Cargo.toml
file y que actives las características necesarias (features
) para utilizar el runtime adecuado.
Asegúrate de que tu archivo Cargo.toml
tenga una dependencia de tokio similar a:
[dependencies]
tokio = { version = "1", features = ["full"] }
Y aquí tienes cómo debería verse tu código:
use tokio::time::{sleep, Duration};
async fn espera() {
sleep(Duration::from_secs(2)).await;
println!("Espera completada.");
}
#[tokio::main]
async fn main() {
espera().await;
println!("Programa finalizado.");
}
Recuerda además que al utilizar las funciones async
, tu entorno (en este caso, la función main) también debe ser async
y es necesario usar el atributo #[tokio::main]
para que funcione con el runtime de Tokio.
Con estos cambios tu código debería compilar y ejecutarse correctamente si tienes las versiones adecuadas de Rust y tokio. ¡Espero que eso resuelva tu problema!