async und await in C#

Muhammad Maisam Abbas 16 Februar 2024
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.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

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