async et await en C#

Muhammad Maisam Abbas 16 février 2024
async et await en C#

Ce didacticiel abordera la programmation asynchrone en C#.

Programmation asynchrone en C#

Si un processus est bloqué dans une application synchrone, toute l’application est bloquée et cesse de répondre jusqu’à ce que ce processus particulier soit terminé. Nous pouvons utiliser la programmation asynchrone dans ce scénario. Avec la programmation asynchrone, notre application peut continuer à travailler en arrière-plan sur certaines tâches indépendantes jusqu’à ce que ce processus particulier s’exécute. En programmation asynchrone, l’ensemble de notre application ne dépend pas simplement d’un seul processus chronophage. La programmation asynchrone est utilisée avec les tâches liées aux E/S ou liées à la CPU. L’utilisation principale de la programmation asynchrone est de créer une interface utilisateur réactive qui ne reste pas bloquée en attendant qu’un processus lié aux E/S ou lié au processeur termine son exécution. Les mots-clés await et async sont utilisés pour la programmation asynchrone en C#. Le mot-clé wait redonne le contrôle à la fonction appelante. Le mot clé await est le mot clé principal qui permet la programmation asynchrone en C#. Le mot-clé async active le mot-clé wait. Une fonction utilisant le mot-clé await doit avoir le mot-clé async et retourner un objet Task en C#. Le mot-clé await ne peut pas être utilisé sans le mot-clé async en C#. L’exemple de code suivant illustre la programmation synchrone en C#.

using System;
using System.Threading.Tasks;

namespace async_and_await {
  class Program {
    public static void process1() {
      for (int i = 0; i < 5; i++) {
        Console.WriteLine("Process 1");
        Task.Delay(100).Wait();
      }
    }
    public static void process2() {
      for (int i = 0; i < 5; i++) {
        Console.WriteLine("Process 2");
        Task.Delay(100).Wait();
      }
    }
    static void Main(string[] args) {
      process1();
      process2();
    }
  }
}

Production:

Process 1
Process 1
Process 1
Process 1
Process 1
Process 2
Process 2
Process 2
Process 2
Process 2

Dans le code ci-dessus, les fonctions process1() et process2() sont des processus indépendants mais la fonction process2() doit attendre la fin de la fonction process1(). Ce simple code de programmation synchrone peut être converti en programmation asynchrone avec les mots-clés async et await en C#.

using System;
using System.Threading.Tasks;

namespace async_and_await {
  class Program {
    public static async Task process1() {
      await Task.Run(() => {
        for (int i = 0; i < 5; i++) {
          Console.WriteLine("Process 1");
          Task.Delay(100).Wait();
        }
      });
    }
    public static void process2() {
      for (int i = 0; i < 5; i++) {
        Console.WriteLine("Process 2");
        Task.Delay(100).Wait();
      }
    }
    static void Main(string[] args) {
      process1();
      process2();
    }
  }
}

Production:

Process 2
Process 1
Process 1
Process 2
Process 2
Process 1
Process 1
Process 2
Process 2
Process 1

Dans le code ci-dessus, nous avons utilisé les mots-clés async et await pour convertir l’exemple précédent en programmation asynchrone. La sortie montre clairement que la fonction process2() n’attend pas pour terminer la fonction process1(). Dans la définition de la fonction process1(), nous avons utilisé le mot-clé async pour suggérer qu’il s’agit d’une fonction à exécution asynchrone. Le mot-clé wait de la fonction process1() redonne le contrôle à la fonction principale, qui appelle alors la fonction process2(). Le contrôle continue de basculer entre les fonctions process1() et process2() jusqu’à la fin de la fonction process1().

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn