async und await in C#
In diesem Tutorial wird die asynchrone Programmierung in C# erläutert.
Asynchrone Programmierung in C#
Wenn ein Prozess in einer synchronen Anwendung blockiert ist, wird die gesamte Anwendung blockiert und reagiert nicht mehr, bis dieser bestimmte Prozess abgeschlossen ist. In diesem Szenario können wir asynchrone Programmierung verwenden. Mit der asynchronen Programmierung kann unsere Anwendung im Hintergrund an einigen unabhängigen Aufgaben weiterarbeiten, bis dieser bestimmte Prozess ausgeführt wird. Bei der asynchronen Programmierung hängt unsere gesamte Anwendung nicht nur von einem einzigen zeitaufwändigen Prozess ab. Asynchrone Programmierung wird bei E/A-gebundenen oder CPU-gebundenen Aufgaben verwendet. Die asynchrone Programmierung wird hauptsächlich verwendet, um eine reaktionsschnelle Benutzeroberfläche zu erstellen, die nicht hängen bleibt, während darauf gewartet wird, dass ein E/A-gebundener oder CPU-gebundener Prozess seine Ausführung abschließt. Die Schlüsselwörter await
und async
werden für die asynchrone Programmierung in C# verwendet. Das Schlüsselwort await
gibt der aufrufenden Funktion die Kontrolle zurück. Das Schlüsselwort await
ist das Hauptschlüsselwort, das die asynchrone Programmierung in C# ermöglicht. Das Schlüsselwort async
aktiviert das Schlüsselwort await
. Eine Funktion, die das Schlüsselwort await
verwendet, muss das Schlüsselwort async
haben und ein Task
-Objekt in C# zurückgeben. Das Schlüsselwort await
kann nicht ohne das Schlüsselwort async
in C# verwendet werden. Das folgende Codebeispiel zeigt die synchrone Programmierung in 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();
}
}
}
Ausgabe:
Process 1
Process 1
Process 1
Process 1
Process 1
Process 2
Process 2
Process 2
Process 2
Process 2
Im obigen Code sind die Funktionen process1()
und process2()
unabhängige Prozesse, aber die Funktion process2()
muss auf den Abschluss der Funktion process1()
warten. Dieser einfache synchrone Programmiercode kann mit den Schlüsselwörtern async
und await
in C# in asynchrone Programmierung konvertiert werden.
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();
}
}
}
Ausgabe:
Process 2
Process 1
Process 1
Process 2
Process 2
Process 1
Process 1
Process 2
Process 2
Process 1
Im obigen Code haben wir die Schlüsselwörter async
und await
verwendet, um das vorherige Beispiel in asynchrone Programmierung zu konvertieren. Die Ausgabe zeigt deutlich, dass die Funktion process2()
nicht auf den Abschluss der Funktion process1()
wartet. In der Definition der Funktion process1()
haben wir das Schlüsselwort async
verwendet, um darauf hinzuweisen, dass es sich um eine asynchron ausgeführte Funktion handelt. Das Schlüsselwort await
in der Funktion process1()
gibt die Steuerung an die Hauptfunktion zurück, die dann die Funktion process2()
aufruft. Die Steuerung wechselt ständig zwischen den Funktionen process1()
und process2()
, bis die Funktion process1()
abgeschlossen ist.
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