async
et await
en C#
Introduction
En C#, la programmation asynchrone permet d'effectuer des opérations de longue durée, comme les appels réseau ou l'accès à des base de données, sans bloquer le thread principal. Cela améliore la réactivité des applications en leur permettant de continuer à répondre aux interactions pendant l'exécution de ces tâches.
Le langage C# fournit deux mots-clés importants pour gérer les opérations asynchrones : async
et await
.
Le Mot-Clé async
Le mot-clé async
est utilisé pour marquer une méthode comme asynchrone. Cela signifie que la méthode peut contenir des opérations asynchrones qui ne bloqueront pas le thread sur lequel elles s'exécutent. Une méthode marquée async
doit retourner un type Task
, Task<T>
, ou void
.
Exemple d'une Méthode async
public async Task<string> FetchDataAsync()
{
// Simulation d'un appel réseau asynchrone
await Task.Delay(2000); // Simule une attente de 2 secondes
return "Données récupérées";
}
Dans cet exemple, FetchDataAsync
est une méthode asynchrone qui retourne un Task<string>
. La méthode utilise await
pour attendre la fin de Task.Delay(2000)
, qui simule un délai de 2 secondes.
Le Mot-Clé await
Le mot-clé await
est utilisé pour indiquer qu'une méthode asynchrone doit attendre la fin d'une opération asynchrone avant de continuer. Lorsqu'une opération asynchrone est "awaitée", le contrôle est temporairement retourné au thread appelant, ce qui permet à l'application de rester réactive.
Exemple d'utilisation de await
Copier le code
public async Task ProcessDataAsync()
{
string data = await FetchDataAsync(); // Attend la fin de FetchDataAsync
Console.WriteLine(data); // Affiche "Données récupérées"
}
Dans cet exemple, ProcessDataAsync
appelle la méthode FetchDataAsync
et utilise await
pour attendre son résultat. Pendant que FetchDataAsync
est en cours d'exécution, ProcessDataAsync
ne bloque pas le thread principal et attendra que la tâche soit terminée pour afficher les données.
Pourquoi Utiliser async et await ?
L'utilisation de async
et await
permet de simplifier le code asynchrone. Plutôt que de gérer manuellement des callbacks ou des threads, vous pouvez écrire du code asynchrone qui ressemble à du code synchrone classique. Cela rend le code plus lisible, plus facile à écrire, et réduit les risques d'erreurs.