Section courante

A propos

Section administrative du site

async

Désynchroniser
Rust

Syntaxe

async fn nom_de_fonction() -> TypeDeRetour {
   // instructions
}
let future = async {
   // instructions
};
let ma_fut = async move {
   // instructions
};
let closure = async || {
   // instructions
};

Paramètres

Nom Description
nom_de_fonction Ce paramètre permet de déclarer une fonction désynchronisée retournant un Future au lieu d'exécuter immédiatement son corps.
async { ... } Ce paramètre permet de créer un bloc désynchronisée (une expression) qui produit un Future exécutant les instructions à l'intérieur.
async move { ... } Ce paramètre permet de créer un bloc asynchrone qui capture par déplacement les variables environnantes, utile pour transférer la propriété dans le futur.

Description

Ce mot réservé permet de retourner un Future au lieu de bloquer le processus léger actuel.

Remarque

Utilisez async devant fn, une fermeture ou un bloc pour transformer le code marqué en Future. Ainsi, le code ne sera pas exécuté immédiatement, mais évalué uniquement lorsque le Future renvoyé sera attendu.

Flux de contrôle

Les instructions return et les opérateurs ? dans les blocs désynchronisées ne provoquent pas de retour de la fonction parente; elles provoquent plutôt le retour de la fonction Future renvoyée par le bloc avec cette valeur.

Par exemple, la fonction Rust suivante renvoie 5, ce qui fait que x prend le type !:

  1. #[expect(unused_variables)]
  2. fn example() -> i32 {
  3.     let x = {
  4.         return 5;
  5.     };
  6. }

En revanche, la fonction désynchronisée suivante attribue un Future<Output = i32> à x et ne renvoie 5 que lorsque x est attendu :

  1. async fn example() -> i32 {
  2.     let x = async {
  3.         return 5;
  4.     };
  5.  
  6.     x.await
  7. }

Le code utilisant ? se comporte de manière similaire : il force le bloc désynchronisée à renvoyer un résultat sans affecter la fonction parente.

Notez que vous ne pouvez pas utiliser break ou continue depuis un bloc désynchronisée pour modifier le flux de contrôle d'une boucle dans la fonction parente.

Éditions

async est un mot clef depuis l'édition 2018.

Il est disponible dans la version stable de Rust à partir de la version 1.39.



Dernière mise à jour : Vendredi, le 1er Août 2025