| .. | ||
| Aufgabe.cs | ||
| index.html | ||
| Musterloesung.cs | ||
| README.md | ||
| TestAufgabe.cs | ||
C# 11: Asynchrone Programmierung mit Async/Await & Task.WhenAll ⚡
Willkommen zu Modul 11! In modernen Microservices und Cloud-Architekturen ist nicht-blockierende, asynchrone Ein-/Ausgabe (I/O) unverzichtbar für maximale Skalierbarkeit und Durchsatz.
💡 1. Das Wichtigste in Kürze
Die Kernbausteine: async, await & Task<T>
Task: Repräsentiert eine laufende oder geplante asynchrone Operation ohne Rückgabewert.Task<T>: Repräsentiert eine asynchrone Operation, die ein Ergebnis vom TypTliefert.async: Markiert eine Methode, die denawait-Operator nutzen darf und transformiert den Code in eine compilergenerierte State Machine.await: Unterbricht die Ausführung der aktuellen Methode, gibt den ausführenden Thread an den ThreadPool zurück und setzt die Ausführung fort, sobald das Ergebnis verfügbar ist.
Parallelisierung mit Task.WhenAll
var taskA = FetchStockDataAsync("MSFT", ct);
var taskB = FetchStockDataAsync("GOOGL", ct);
// Beide Tasks laufen gleichzeitig!
string[] results = await Task.WhenAll(taskA, taskB);
Kooperativer Abbruch mit CancellationToken
public async Task ProcessDataAsync(CancellationToken ct)
{
while (!ct.IsCancellationRequested)
{
await DoWorkChunkAsync(ct);
}
ct.ThrowIfCancellationRequested();
}
🎯 Teilziele in Aufgabe.cs
-
TODO 1:
FetchServiceDataAsync
Simuliere einen asynchronen API-Aufruf mitTask.Delay(delayMs, ct)und gib eineServiceResponsezurück. -
TODO 2:
AggregateServicesAsync
Starte die Abrufe für alle übergebenen Endpunkte parallel mitTask.WhenAllund sammle die Antworten. -
TODO 3:
FetchFastestResponseAsync
VerwendeTask.WhenAny, um das Ergebnis des am schnellsten antwortenden Endpunkts abzugreifen. -
TODO 4:
ExecuteWithTimeoutAsync<T>
Kapsele eine asynchrone Funktion mit einem harten Timeout mittelsCancellationTokenSource(TimeSpan timeout).