Neuerungen in .NET 10 12.03.2025, 10:53 Uhr

IAsyncEnumerable in .NET 10

Die Einführung von System.Linq.Async in .NET 10 bringt bedeutende Verbesserungen für asynchrone Programmierung mit IAsyncEnumerable.
(Quelle: EMGenie)
Mit .NET 10 erhalten Entwickler eine Verbesserung bei der asynchronen Programmierung: System.Linq.Async. Dieses neue API ermöglicht die Verwendung von LINQ-Methoden wie Select und Where für asynchrone Enumerables, was die Handhabung und das Schreiben von asynchronem Code erheblich vereinfacht.
IAsyncEnumerable wurde erstmals mit .NET Core 3.1 eingeführt. Es handelt sich um einen Datentyp, der Entwicklern erlaubt, mit asynchronen Sammlungen zu arbeiten. Bis .NET 10 war IAsyncEnumerable jedoch in seinen Funktionen eingeschränkt. Mit den neuen Erweiterungen für IAsyncEnumerable hat Microsoft die Feature-Parität zwischen asynchronen und synchronen Versionen, die in IEnumerable verfügbar sind, hergestellt.
Ein einfaches Beispiel verdeutlicht die neuen Möglichkeiten: Angenommen, Sie haben eine Quelle von
IAsyncEnumerable<MyObject> items = GetItems(); 
Sie können filternde Abfragen durchführen, indem Sie
await items.Where(x => x.IsEnabled).ToListAsync(cancellationToken: token); 
verwenden. Dies erlaubt es, die Ergebnisse direkt als ReadOnlyCollection anzufordern, ohne dass komplexe asynchrone Kontrolle erforderlich ist.
Ein weiteres nützliches Beispiel ist das Berechnen des Durchschnitts eines bestimmten Wertes in Ihrer Sammlung:
var result = await items.Select(
  s => s.SomeNumber).AverageAsync(cancellationToken);
Es ist erwähnenswert, dass die ursprüngliche Implementierung des System.Linq.Async API über ein NuGet-Paket bereitgestellt wurde, welches jedoch ab .NET 10 nicht mehr benötigt wird. Das API bleibt dabei identisch, sodass Entwickler, die in ihren Projekten bereits dieses Paket nutzen, es einfach entfernen können. Bei der Migration von Projekten sollten jedoch einige Punkte beachtet werden, insbesondere wenn es transitive Abhängigkeiten gibt, die das System.Linq.Async-Paket verwenden.
Weitere Informationen zu IAsyncEnumerable im Blog-Beitrag von Steven Giesel.


Das könnte Sie auch interessieren