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.