Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Platforma .NET 10 wprowadza klasę AsyncEnumerable , która udostępnia pełny zestaw metod rozszerzeń LINQ dla IAsyncEnumerable<T> typu. Ta klasa zastępuje bibliotekę NuGet utrzymywaną System.Linq.Async przez społeczność, co potencjalnie powoduje błędy kompilacji z powodu niejednoznaczności.
Wersja wprowadzona
.NET 10
Poprzednie zachowanie
Wcześniej klasa w AsyncEnumerableSystem.Linq.Async zapewniała obsługę LINQ dla programu .
Nowe zachowanie
Klasa AsyncEnumerable na platformie .NET 10 i w pakiecieSystem.Linq.AsyncEnumerable NuGet zapewnia obsługę LINQ dla programu IAsyncEnumerable<T>.
Typ zmiany przełamującej
Ta zmiana może mieć wpływ na zgodność źródła.
Przyczyna zmiany
IAsyncEnumerable<T> jest powszechnie używanym interfejsem, więc sama platforma powinna zapewnić obsługę LINQ dla typu. Osoby utrzymujące System.Linq.Async oraz inni członkowie społeczności złożyli petycję o włączenie bezpośrednio na platformie.
Zalecana akcja
Jeśli uaktualniasz do platformy .NET 10, a kod zawiera bezpośrednie odwołanie do System.Linq.Asyncpakietu , usuń odwołanie do tego pakietu lub uaktualnij go do wersji 7.0.0. W przypadku wielotargetowania zarówno .NET 10, jak i poprzedniej wersji, dodaj odwołanie do pakietu System.Linq.AsyncEnumerable.
Jeśli System.Linq.Async jest używany pośrednio za pośrednictwem innego pakietu, unikaj błędów niejednoznaczności, dodając <ExcludeAssets> metadane z wartością compile lub all:
Aby zezwolić na przechodnie użycie elementu
System.Linq.Async, ustaw wartość<ExcludeAssets>nacompile:<PackageReference Include="System.Linq.Async" Version="6.0.1"> <ExcludeAssets>compile</ExcludeAssets> </PackageReference>Ta konfiguracja uniemożliwia bezpośrednie użycie w kodzie przy jednoczesnym umożliwieniu innym pakietom dalszego korzystania z programu System.Linq.Async wewnętrznie.
W przypadku pełnego wykluczenia ustaw wartość
<ExcludeAssets>all:<PackageReference Include="System.Linq.Async" Version="6.0.1"> <ExcludeAssets>all</ExcludeAssets> </PackageReference>Użyj tej konfiguracji tylko wtedy, gdy nie masz pewności, że żadne zależności nie wymagają narzędzia System.Linq.Async w czasie wykonywania.
Większość korzystania z kodu powinna być zgodna bez zmian, ale niektóre witryny wywołań mogą wymagać aktualizacji, aby odwoływać się do nowszych nazw i podpisów. Na przykład, wywołanie takie jak Selecte.Select(i => i * 2) działa tak samo przed i po określonym momencie. Jednak wywołanie e.SelectAwait(async (int i, CancellationToken ct) => i * 2) musi zostać zmienione, aby używać Select zamiast SelectAwait, jak w e.Select(async (int i, CancellationToken ct) => i * 2).
Pełny zestaw dostępnych metod rozszerzenia LINQ dla IAsyncEnumerable<T> można znaleźć w dokumentacji API System.Linq.AsyncEnumerable.