Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В .NET 10 представлен AsyncEnumerable класс, который предоставляет полный набор методов расширения LINQ для IAsyncEnumerable<T> типа. Этот класс заменяет поддерживаемую System.Linq.Async сообществом библиотеку NuGet, что потенциально приводит к ошибкам компиляции из-за неоднозначности.
Представленная версия
.NET 10
Предыдущее поведение
AsyncEnumerable Ранее класс в поддерживаемом System.Linq.Async сообществом пакете предоставил LINQ поддержкуIAsyncEnumerable<T>.
Новое поведение
Класс AsyncEnumerable в .NET 10 и в пакетеSystem.Linq.AsyncEnumerable NuGet предоставляет LINQ поддержкуIAsyncEnumerable<T>.
Тип разрушающего изменения
Это изменение может повлиять на совместимость источников.
Причина изменения
IAsyncEnumerable<T> — это часто используемый интерфейс, поэтому сама платформа должна предоставлять LINQ поддержку типа. Поддерживающие и другие члены System.Linq.Async сообщества подали петиции за включение непосредственно на платформу.
Рекомендуемое действие
Если вы обновляетесь до .NET 10 и код включает прямую ссылку на пакет, удалите эту ссылку System.Linq.Asyncна пакет или обновите ее до версии 7.0.0.0. Для мультитаргетинга как .NET 10, так и предыдущей версии, добавьте ссылку на System.Linq.AsyncEnumerable пакет вместо этого.
Если System.Linq.Async используется косвенно через другой пакет, избегайте неоднозначности ошибок, добавляя <ExcludeAssets> метаданные со значением compile или all:
Чтобы разрешить транзитивное использование
System.Linq.Async, задайте<ExcludeAssets>дляcompileпараметра :<PackageReference Include="System.Linq.Async" Version="6.0.1"> <ExcludeAssets>compile</ExcludeAssets> </PackageReference>Эта конфигурация предотвращает прямое использование в коде, позволяя другим пакетам продолжать использовать System.Linq.Async внутренне.
Для полного исключения установите значение
<ExcludeAssets>all:<PackageReference Include="System.Linq.Async" Version="6.0.1"> <ExcludeAssets>all</ExcludeAssets> </PackageReference>Используйте эту конфигурацию только в том случае, если в среде выполнения не требуются зависимости System.Linq.Async.
Большинство используемого кода должно быть совместимо без изменений, но некоторые точки вызова могут потребовать обновления для ссылки на новые имена и сигнатуры. Например, вызов Select работает e.Select(i => i * 2) одинаково до и после. Однако вызов e.SelectAwait(async (int i, CancellationToken ct) => i * 2) необходимо изменить, чтобы использовать Select вместо SelectAwait, как в e.Select(async (int i, CancellationToken ct) => i * 2).
Полный набор доступных методов IAsyncEnumerable<T>расширения LINQ см. в документации по API System.Linq.AsyncEnumerable.