Entwicklung & Code
Neu in .NET 9.0 [24]: Erweiterung für die Task-Klasse
Die Klasse System.Threading.Tasks.Task
bietet die neue Methode WhenEach()
, die ein IAsyncEnumerable
liefert und eine foreach
-Schleife jeweils durchläuft, sobald ein Ergebnis einer der angegebenen Aufgaben bereitsteht.
Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.
Das heißt: Die Arbeit beginnt, sobald es ein erstes Ergebnis gibt und nicht erst, wenn alle Ergebnisse zur Verfügung stehen wie bei der Methode WhenAll()
, die es seit dem klassischen .NET Framework 4.5 gibt.
Folgender Code verwendet WhenEach()
, um den Status von mehreren HTTP-Anfragen sukzessive zu ermitteln:
public async Task Run()
{
CUI.Demo(nameof(FCL9_Task)+ " WhenEach()");
using HttpClient http = new();
Task t1 = http.GetAsync("
Task t2 = http.GetAsync("
Task t3 = http.GetAsync("
Task t4 = http.GetAsync("
Task t5 = http.GetAsync("
// Starte einen Task, der 5 Sekunden braucht und HttpResponseMessage zurückgibt
Task t6 = Task.Delay(5000).ContinueWith(t => new HttpResponseMessage(System.Net.HttpStatusCode.InternalServerError) { RequestMessage = new HttpRequestMessage() { RequestUri = new Uri(" } });
await foreach (Task t in Task.WhenEach(t1, t2, t3, t4, t5, t6))
{
Console.WriteLine($"{DateTime.Now.ToLongTimeString()}: {t.Result?.RequestMessage?.RequestUri} = {t?.Result?.StatusCode}");
}
}
(rme)