Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
.NET 10 presenta la AsyncEnumerable clase , que proporciona un conjunto completo de métodos de extensión LINQ para el IAsyncEnumerable<T> tipo . Esta clase reemplaza a la biblioteca nuGet mantenida por System.Linq.Async la comunidad, lo que puede provocar errores de compilación debido a ambigüedades.
Versión introducida
.NET 10
Comportamiento anterior
Anteriormente, la AsyncEnumerable clase del paquete mantenido por System.Linq.Async la comunidad proporcionaba compatibilidad con LINQ para IAsyncEnumerable<T>.
Nuevo comportamiento
La AsyncEnumerable clase en .NET 10 y en el System.Linq.AsyncEnumerable paquete NuGet proporciona compatibilidad con LINQ para IAsyncEnumerable<T>.
Tipo de cambio disruptivo
Este cambio puede afectar a la compatibilidad de origen.
Motivo del cambio
IAsyncEnumerable<T> es una interfaz usada habitualmente, por lo que la propia plataforma debe proporcionar compatibilidad con LINQ para el tipo. Los mantenedores de System.Linq.Async y otros miembros de la comunidad solicitaron inclusión directamente en la plataforma.
Acción recomendada
Si va a actualizar a .NET 10 y el código incluye una referencia de paquete directo a System.Linq.Async, quite esa referencia de paquete o actualice a la versión 7.0.0. En el caso de .NET 10 y una versión anterior, agregue una referencia de paquete a System.Linq.AsyncEnumerable en su lugar.
Si System.Linq.Async se consume indirectamente a través de otro paquete, evite errores de ambigüedad agregando <ExcludeAssets> metadatos con un valor de compile o all:
Para permitir el uso transitivo de
System.Linq.Async, establezca<ExcludeAssets>encompile:<PackageReference Include="System.Linq.Async" Version="6.0.1"> <ExcludeAssets>compile</ExcludeAssets> </PackageReference>Esta configuración evita el uso directo en el código, al tiempo que permite que otros paquetes sigan usando System.Linq.Async internamente.
Para la exclusión completa, establezca
<ExcludeAssets>enall.<PackageReference Include="System.Linq.Async" Version="6.0.1"> <ExcludeAssets>all</ExcludeAssets> </PackageReference>Use esta configuración solo si no tiene ninguna dependencia que requiera System.Linq.Async en tiempo de ejecución.
La mayoría de los códigos de consumo deben ser compatibles sin cambios, pero es posible que algunos sitios de llamada necesiten actualizaciones para hacer referencia a nombres y firmas más recientes. Por ejemplo, una Select llamada como e.Select(i => i * 2) funciona igual antes y después. Sin embargo, la llamada e.SelectAwait(async (int i, CancellationToken ct) => i * 2) debe cambiarse para usar Select en lugar de SelectAwait, como en e.Select(async (int i, CancellationToken ct) => i * 2).
Para obtener el conjunto completo de métodos de extensión LINQ disponibles para IAsyncEnumerable<T>, consulte la documentación de la API System.Linq.AsyncEnumerable.