Sobes.tech
Junior

Qu'est-ce que la programmation asynchrone utilisant les mots-clés async et await?

sobes.tech IA

Réponse de l'IA

La programmation asynchrone avec async et await permet d’effectuer des opérations pouvant prendre du temps (par exemple, entrée/sortie, requêtes réseau) sans bloquer le fil d’exécution principal du programme. Cela améliore la réactivité de l’application.

  • async : Utilisé pour modifier une méthode et indique au compilateur que des opérateurs await seront utilisés à l’intérieur. Une méthode marquée comme async peut retourner Task, Task<T> ou void (bien que void doive être évité, sauf pour les gestionnaires d’événements). Le Task ou Task<T> retourné représente une opération qui n’est pas encore terminée.
  • await : S’applique à une opération asynchrone (retournant Task ou Task<T>). Lorsqu’elle atteint l’opérateur await, la méthode « suspend » son exécution, libérant le fil actuel. L’opération asynchrone s’exécute en arrière-plan (ou utilise un pool de threads, ou le mécanisme d’entrée/sortie du système d’exploitation). Lorsqu’elle se termine, l’exécution de la méthode reprend après le même await dans un autre fil ou dans le même si celui-ci est disponible.

Exemple d’utilisation de base :

// méthode async retournant Task
public async Task DoSomethingAsync()
{
    // Effectue une opération asynchrone en attendant sa fin
    await Task.Delay(1000); // Simulation d’une opération longue
    Console.WriteLine("Opération asynchrone terminée.");
}

// méthode async retournant Task<int>
public async Task<int> GetValueAsync()
{
    await Task.Delay(500);
    return 42;
}

// Utilisation de async et await dans la méthode Main (pour l’exemple, dans les applications réelles, généralement lancé depuis un Main async dans .NET Core 3.0+)
public static async Task Main(string[] args)
{
    Console.WriteLine("Démarrage...");
    
    // Appel des méthodes asynchrones
    await DoSomethingAsync();
    int result = await GetValueAsync();
    
    Console.WriteLine($"Résultat : {result}");
    Console.WriteLine("Terminé.");
}

L’avantage principal de async/await par rapport à la gestion manuelle des threads ou des callbacks est la simplification de l’écriture et de la lecture du code asynchrone. Il ressemble presque au code synchrone, mais ne bloque pas le fil, ce qui est crucial pour les applications avec interface utilisateur ou les applications serveur à haute charge.