In C# werden die Schlüsselwörter „async“ und „await“ in der asynchronen Programmierung verwendet. Manchmal wird in unserer Anwendung die Benutzeroberfläche aufgrund eines Prozesses blockiert, beispielsweise einer langen Methode, die in unserer Anwendung ausgeführt wird. Die Benutzeroberfläche reagiert, wenn dieser Prozess beendet ist.
Wenn wir möchten, dass unsere Anwendung reagiert, unabhängig davon, ob ein Prozess im Hintergrund läuft, können wir die Schlüsselwörter „async“ und „await“ verwenden, die unseren Code asynchron machen, was es unserer Anwendung im Ergebnis ermöglicht, mit der Ausführung anderen Codes zu beginnen, wenn bereits ein Es wird eine lange Methode ausgeführt, die unabhängig von anderem Code ist.
Syntax:
public asyncTask<em>MethodName</em>() { await Task.Run( //user code ); }
In den obigen Anweisungen geben die Schlüsselwörter „async“ und „await“ an, dass es sich bei diesem Code um asynchronen Code handelt. Die Methode „MethodName“ wird asynchron ausgeführt und führt den Code in Task.Run() aus, ohne die Anwendung zu blockieren.
Bei der sequentiellen und synchronen Programmierung wird der Code nicht weiter ausgeführt, d. h. die nächste Anweisung wird erst ausgeführt, wenn die aktuelle Anweisung ihre Arbeit beendet hat. Eine solche Art der Ausführung nimmt bei langen Berechnungen mehr Zeit in Anspruch und kann manchmal dazu führen, dass unsere Anwendung nicht mehr reagiert. Um eine solche Situation zu überwinden, können wir unseren Code mithilfe des Schlüsselworts „async“ und „await“ asynchron machen.
Zum Beispiel, wenn wir zwei Methoden in unserem Code haben und diese Methoden unabhängig voneinander sind. Die erste Methode besteht darin, eine lange Berechnung durchzuführen, und die zweite Methode besteht darin, einige Details der Anwendung auszudrucken. Die erste Methode erfordert mehr Zeit zur Ausführung als die zweite Methode. Wenn unser Code synchron ist, wird die zweite Methode erst ausgeführt, wenn die erste Methode ihre Ausführung abgeschlossen hat.
Wenn wir andererseits in unserer ersten Methode die Schlüsselwörter „async“ und „await“ verwendet haben, um sie asynchron zu machen, kann die zweite Methode unabhängig vom Abschluss der ersten Methode mit der Ausführung beginnen. Diese asynchrone Programmierung benötigt weniger Zeit für die Ausführung und macht unsere Anwendung somit reaktionsfähiger und benutzerfreundlicher.
Jede Methode, die das Schlüsselwort „await“ verwendet, muss als asynchron markiert werden. Das Schlüsselwort async wird in der Methodensignatur verwendet, die dem Compiler mitteilt, dass es sich bei dieser Methode um eine asynchrone Methode handelt. Wir können async auch auf die überladene Methode anwenden. Das Schreiben von asynchronem Code mit „async“ und „await“ bedeutet nicht, dass unsere Aufgabe von mehreren Threads ausgeführt wird, sondern stellt sicher, dass der Hauptthread der Anwendung nicht blockiert wird. Wir können async nicht ohne „await“ verwenden und wir können auch „await“ nicht ohne async verwenden. Mit diesen Schlüsselwörtern können wir asynchronen Code schreiben, um sowohl E/A-gebundene als auch CPU-gebundene Vorgänge auszuführen.
In einer asynchronen Methode hält der Wait-Operator die Verarbeitung dieser Methode an, bis ihr Operand die Ausführung der entsprechenden asynchronen Operation abgeschlossen hat. Nach Abschluss der asynchronen Operation gibt der Wait-Operator das Ergebnis dieser asynchronen Operation zurück. Wenn andererseits der Operand des Wait-Operators seine Operation bereits abgeschlossen hat, unterbricht der Wait-Operator die Verarbeitung der entsprechenden asynchronen Methode nicht und gibt das Ergebnis der Operation sofort zurück, ohne dass die asynchrone Methode angehalten wird. Beim Anhalten der asynchronen Methode durch den Wait-Operator kehrt die Steuerung dieser asynchronen Methode zur aufrufenden Methode zurück.
Im Folgenden finden Sie einige Punkte, die Sie bei der Arbeit mit Async- und Wait-Schlüsselwörtern beachten sollten:
Im Folgenden sind die Beispiele aufgeführt:
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; } } }
Ausgabe:
Wir können in der Ausgabe sehen, dass das obige Programm asynchron ausgeführt wurde. Der Prozess des Dateilesens hat begonnen und während die Datei gelesen wird, werden die Anweisungen nach dem Dateileseprozess ausgeführt, ohne dass darauf gewartet werden muss, dass die Datei vollständig gelesen wurde.
Bitte finden Sie unten ein weiteres Beispiel für Async und warten Sie darauf, die Summe der Zahlen bis 1000 zu berechnen.
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; } } }
Ausgabe:
Die Schlüsselwörter „async“ und „await“ in C# werden zum Schreiben von asynchronem Code verwendet. Wenn eine Methode eine lange Berechnung durchführt oder wenn es einen Vorgang gibt, dessen Ausführung mehr Zeit erfordert, können wir diese Vorgänge asynchron ausführen, wodurch unsere Anwendung reagiert.
Das obige ist der detaillierte Inhalt vonC# wartet auf Async. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!