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()
.
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