En C#, les mots-clés async et wait sont utilisés dans la programmation asynchrone. Parfois, dans notre application, l'interface utilisateur est bloquée en raison d'un processus tel qu'une méthode longue exécutée dans notre application. L'interface utilisateur devient réactive à la fin de ce processus.
Si nous voulons que notre application soit réactive quel que soit tout processus exécuté en arrière-plan, nous pouvons alors utiliser le mot-clé async et wait qui rendra notre code asynchrone, ce qui permettra à notre application de commencer à exécuter un autre code alors qu'elle est déjà en cours. La méthode longue est en cours d'exécution, indépendante des autres codes.
Syntaxe :
public asyncTask<em>MethodName</em>() { await Task.Run( //user code ); }
Dans les instructions ci-dessus, les mots-clés async et wait précisent que ce code est du code asynchrone. La méthode 'MethodName' s'exécutera de manière asynchrone et exécutera le code dans Task.Run() sans bloquer l'application.
Dans la programmation séquentielle et synchrone, le code ne s'exécutera plus, c'est-à-dire que l'instruction suivante ne sera pas exécutée tant que l'instruction actuelle n'aura pas fini de fonctionner. Ce type d'exécution prend plus de temps pour des calculs longs et peut parfois rendre notre application insensible. Pour surmonter une telle situation, nous pouvons rendre notre code asynchrone à l'aide du mot-clé async et wait.
Par exemple, si nous avons deux méthodes dans notre code et que ces méthodes sont indépendantes les unes des autres. La première méthode consiste à effectuer un long calcul et la deuxième méthode consiste à imprimer certains détails de l'application. La première méthode nécessite plus de temps d’exécution que la seconde méthode. Si notre code est synchrone, la deuxième méthode ne sera pas exécutée tant que la première méthode n'aura pas terminé son exécution.
D'un autre côté, si nous avons utilisé les mots-clés async et wait dans notre première méthode pour la rendre asynchrone, alors la deuxième méthode peut démarrer son exécution indépendamment de l'achèvement de la première méthode. Cette programmation asynchrone prend moins de temps à exécuter et rend ainsi notre application plus réactive et conviviale.
Toute méthode utilisant le mot-clé wait doit être marquée comme asynchrone. Le mot clé async est utilisé dans la signature de la méthode qui indique au compilateur que cette méthode est une méthode asynchrone. Nous pouvons également appliquer async à la méthode surchargée. Écrire du code asynchrone en utilisant async et wait ne signifie pas que notre tâche sera effectuée par plusieurs threads mais cela garantit que le thread principal de l'application ne sera pas bloqué. Nous ne pouvons pas utiliser async sans wait et nous ne pouvons pas non plus utiliser wait sans async. Nous pouvons utiliser ces mots-clés pour écrire du code asynchrone afin d'effectuer à la fois des opérations liées aux E/S et au CPU.
Dans une méthode asynchrone, l'opérateur wait suspend le traitement de cette méthode jusqu'à ce que son opérande termine l'exécution de l'opération asynchrone correspondante. Une fois l'opération asynchrone terminée, l'opérateur wait renvoie le résultat de cette opération asynchrone. En revanche, si l'opérande de l'opérateur wait a déjà terminé son opération alors l'opérateur wait ne suspend pas le traitement de la méthode asynchrone correspondante et renvoie immédiatement le résultat de l'opération sans aucune suspension de la méthode asynchrone. Lors de la suspension de la méthode asynchrone par l'opérateur wait, le contrôle de cette méthode asynchrone revient à la méthode appelante.
Veuillez trouver ci-dessous quelques points à garder à l'esprit lorsque vous travaillez avec des mots-clés async et wait :
Voici les exemples donnés ci-dessous :
Code :
using System; using System.IO; using System.Threading; using System.Threading.Tasks; namespace ConsoleApp4 { public class Program { public static void Main() { TaskMethod(); Console.ReadLine(); } public static async void TaskMethod() { Task<int> task = new Task<int>(CountCharacters); task.Start(); Console.WriteLine("1. Other task executing"); Console.WriteLine("2. Other task executing"); Console.WriteLine("3. Other task executing"); int count = await task; Console.WriteLine(" Total characters in file: " + count); Console.WriteLine("1. After executing task"); Console.WriteLine("2. After executing task"); } //method to count number of characters in file public static intCountCharacters() { int count = 0; string filePath = @"E:\Content\content.txt"; Console.WriteLine("Reading file"); using (StreamReaderstreamReader = new StreamReader(filePath)) { //reading the whole content of the file string fileContent = streamReader.ReadToEnd(); count = fileContent.Length; } Console.WriteLine("File reading completed"); return count; } } }
Sortie :
Nous pouvons voir dans le résultat que le programme ci-dessus s'est exécuté de manière asynchrone. Le processus de lecture du fichier a démarré et pendant la lecture du fichier, les instructions après le processus de lecture du fichier ont commencé à s'exécuter sans attendre que le fichier soit complètement lu.
Veuillez trouver ci-dessous un autre exemple d'asynchrone et attendez de calculer la somme des nombres jusqu'à 1000.
Code :
using System; using System.IO; using System.Threading; using System.Threading.Tasks; namespace ConsoleApp4 { public class Program { public static void Main() { TaskMethod(); Console.ReadLine(); } public static async void TaskMethod() { Task<int> task = new Task<int>(AddNumbers); task.Start(); Console.WriteLine("1. Other task executing"); Console.WriteLine("2. Other task executing"); Console.WriteLine("3. Other task executing"); int total = await task; Console.WriteLine(" Sum of numbers till 1000: " + total); Console.WriteLine("1. After executing task"); Console.WriteLine("2. After executing task"); } //method to add numbers from 1 to 1000 public static intAddNumbers() { int count = 0; Console.WriteLine("Adding numbers"); for (inti = 0; i<= 1000; i++) { count += i; } return count; } } }
Sortie :
Les mots-clés async et wait en C# sont utilisés pour écrire du code asynchrone. Si une méthode effectue un calcul long ou s'il y a une opération qui nécessite plus de temps à exécuter, nous pouvons effectuer ces opérations de manière asynchrone grâce à quoi notre application sera réactive.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!