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.
- Ajoutez le crate
tokio
aux dépendances de votre projet, avec la featurefull
pour bénéficier de l'exécutif multi-cœurs. - Ajoutez-y également le crate
futures
qui fournit des extensions utiles sur les types implémentant les traitsFuture
etStream
. - Lancez automatiquement l'exécutif de
tokio
en déclarant la fonctionmain()
asynchrone et en lui associant l'attributtokio::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
.