Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
.NET 10 führt die AsyncEnumerable Klasse ein, die einen vollständigen Satz von LINQ-Erweiterungsmethoden für den IAsyncEnumerable<T> Typ bereitstellt. Diese Klasse ersetzt die von der Community verwaltete System.Linq.Async NuGet-Bibliothek und verursacht möglicherweise Kompilierungsfehler aufgrund von Mehrdeutigkeiten.
Eingeführt in Version
.NET 10
Vorheriges Verhalten
Zuvor bot die AsyncEnumerable Klasse im community-verwalteten System.Linq.Async Paket LINQ-Unterstützung für IAsyncEnumerable<T>.
Neues Verhalten
Die AsyncEnumerable Klasse in .NET 10 und im System.Linq.AsyncEnumerable NuGet-Paket bietet LINQ-Unterstützung für IAsyncEnumerable<T>.
Art der einschneidenden Änderung
Diese Änderung kann sich auf die Quellkompatibilität auswirken.
Grund für Änderung
IAsyncEnumerable<T> ist eine häufig verwendete Schnittstelle, sodass die Plattform selbst LINQ-Unterstützung für den Typ bereitstellen sollte. Die Betreuer von System.Linq.Async und andere Communitymitglieder haben die Aufnahme direkt auf der Plattform gefordert.
Empfohlene Aktion
Wenn Sie ein Upgrade auf .NET 10 durchführen und Ihr Code einen direkten Paketverweis enthält, entfernen Sie diesen Paketverweis System.Linq.Async, oder führen Sie ein Upgrade auf Version 7.0.0 durch. Fügen Sie stattdessen für das Multitargeting von .NET 10 und einer früheren Version einen Paketverweis zu System.Linq.AsyncEnumerable hinzu.
Wenn System.Linq.Async indirekt über ein anderes Paket genutzt wird, vermeiden Sie Mehrdeutigkeitsfehler, indem Sie <ExcludeAssets> Metadaten mit einem Wert von compile oder all hinzufügen:
So erlauben Sie die transitive Verwendung von
System.Linq.Async, indem Sie<ExcludeAssets>aufcompilesetzen.<PackageReference Include="System.Linq.Async" Version="6.0.1"> <ExcludeAssets>compile</ExcludeAssets> </PackageReference>Diese Konfiguration verhindert die direkte Verwendung in Ihrem Code, während andere Pakete system.Linq.Async intern weiterhin verwenden können.
Setzen Sie
<ExcludeAssets>aufallfür den vollständigen Ausschluss.<PackageReference Include="System.Linq.Async" Version="6.0.1"> <ExcludeAssets>all</ExcludeAssets> </PackageReference>Verwenden Sie diese Konfiguration nur, wenn Sie sicher sind, dass system.Linq.Async zur Laufzeit keine Abhängigkeiten erfordert.
Der am meisten verbrauchende Code sollte ohne Änderungen kompatibel sein. Einige Aufrufsites müssen jedoch möglicherweise aktualisiert werden, um auf neuere Namen und Signaturen zu verweisen. Beispielsweise funktioniert ein Select Anruf wie e.Select(i => i * 2) zuvor und danach gleich. Der Anruf e.SelectAwait(async (int i, CancellationToken ct) => i * 2) muss jedoch geändert werden, um Select anstelle von SelectAwait zu verwenden, wie es in e.Select(async (int i, CancellationToken ct) => i * 2) gemacht wird.
Den vollständigen Satz von LINQ-Erweiterungsmethoden, die für IAsyncEnumerable<T> verfügbar sind, finden Sie in der Dokumentation zur System.Linq.AsyncEnumerable-API.