Le modèle async de Rust
AvancéUne async fn renvoie un Future : une valeur inerte qui ne fait rien tant qu'elle n'est pas awaitée ou pollée par un runtime. Rust n'embarque pas de runtime : on utilise Tokio (le standard de fait).
cargo add tokio -F full
use std::time::Duration;
#[tokio::main]
async fn main() {
let resultat = calculer().await; // .await suspend sans bloquer le thread
println!("{resultat}");
}
async fn calculer() -> u32 {
tokio::time::sleep(Duration::from_millis(100)).await;
42
}
Piège : ne jamais utiliser
std::thread::sleepni des I/O bloquantes dans du code async — cela bloque le thread du runtime et gèle les autres tâches. Utiliseztokio::time::sleep/tokio::fs, ouspawn_blocking.