C# Attendre Async

WBOY
Libérer: 2024-09-03 15:31:46
original
680 Les gens l'ont consulté

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
);
}
Copier après la connexion

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.

Comment fonctionnent Await et Async en C# ?

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 :

  • Si une méthode est marquée comme asynchrone, alors il devrait y avoir une utilisation de l'opérateur wait à l'intérieur de cette méthode, sinon l'utilisateur recevra un avertissement du compilateur et la méthode sera exécutée comme n'importe quelle autre méthode normale.
  • Le 'async void' doit être utilisé uniquement pour les gestionnaires d'événements et non pour les méthodes car l'événement n'a aucun type de retour.
  • Les exceptions levées par la méthode marquée comme « async void » ne peuvent pas être interceptées en dehors de la méthode et il est également très difficile de tester une telle méthode.

Exemples de C# en attente asynchrone

Voici les exemples donnés ci-dessous :

Exemple n°1

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;
}
}
}
Copier après la connexion

Sortie :

C# Attendre Async

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.

Exemple n°2

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;
}
}
}
Copier après la connexion

Sortie :

C# Attendre Async

Conclusion

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!

Étiquettes associées:
source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal