Programmation asynchrone

Nous allons introduire de la programmation asynchrone dans notre programme. Si votre programme précédent est dans un état compilable, nous allons le compléter, sinon il vous suffit de recréer un nouveau projet (en choisissant un nouveau nom) comme indiqué ici.

Choix de l'exécutif asynchrone

Plusieurs exécutifs asynchrones existent : tokio, async-std, etc. Nous utiliserons ici tokio.

  1. Ajoutez le crate tokio aux dépendances de votre projet, avec la feature full pour bénéficier de l'exécutif multi-cœurs.
  2. Ajoutez-y également le crate futures qui fournit des extensions utiles sur les types implémentant les traits Future et Stream.
  3. Lancez automatiquement l'exécutif de tokio en déclarant la fonction main() asynchrone et en lui associant l'attribut tokio::main :
#[tokio::main]
async fn main() -> Result<(), Error> {
  …
}

Dès lors, main() s'exécute dans un contexte async et peut utiliser await sur des fonctions et des blocs async. De même, les fonctionnalités spécifiques à tokio peuvent être utilisées étant donné que nous sommes dans le contexte d'un exécutif tokio.