Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O .NET 10 apresenta a AsyncEnumerable classe, que fornece um conjunto completo de métodos de extensão LINQ para o IAsyncEnumerable<T> tipo. Essa classe substitui a biblioteca NuGet mantida System.Linq.Async pela comunidade, potencialmente causando erros de compilação devido a ambiguidades.
Versão introduzida
.NET 10
Comportamento anterior
Anteriormente, a AsyncEnumerable classe no pacote mantido pela System.Linq.Async comunidade fornecia suporte LINQ para IAsyncEnumerable<T>.
Novo comportamento
A AsyncEnumerable classe no .NET 10 e no System.Linq.AsyncEnumerable pacote NuGet fornece suporte LINQ para IAsyncEnumerable<T>.
Tipo de mudança disruptiva
Essa alteração pode afetar a compatibilidade da fonte.
Motivo da mudança
IAsyncEnumerable<T> é uma interface comumente usada, então a própria plataforma deve fornecer suporte LINQ para o tipo. Mantenedores de System.Linq.Async e outros membros da comunidade solicitaram a inclusão diretamente na plataforma.
Ação recomendada
Se estiveres a atualizar para .NET 10 e o teu código incluir uma referência direta a System.Linq.Asyncum pacote , remove essa referência de pacote ou atualiza para a versão 7.0.0. Para realizar o multitargeting no .NET 10 e numa versão anterior, adicione uma referência de pacote a System.Linq.AsyncEnumerable.
Se System.Linq.Async for consumido indiretamente através de outro pacote, evite erros de ambiguidade adicionando <ExcludeAssets> metadados com um valor de compile ou all:
Para permitir o uso transitivo de
System.Linq.Async, defina<ExcludeAssets>comocompile:<PackageReference Include="System.Linq.Async" Version="6.0.1"> <ExcludeAssets>compile</ExcludeAssets> </PackageReference>Essa configuração impede o uso direto em seu código, permitindo que outros pacotes continuem usando System.Linq.Async internamente.
Para exclusão completa, defina
<ExcludeAssets>comoall:<PackageReference Include="System.Linq.Async" Version="6.0.1"> <ExcludeAssets>all</ExcludeAssets> </PackageReference>Use esta configuração apenas se tiver a certeza de que nenhuma dependência requer System.Linq.Async em tempo de execução.
A maioria do código utilizado deve ser compatível sem alterações, mas alguns pontos de chamada podem precisar de atualizações para fazer referência a nomes e assinaturas mais recentes. Por exemplo, uma Select chamada como e.Select(i => i * 2) funciona da mesma forma antes e depois. No entanto, a chamada e.SelectAwait(async (int i, CancellationToken ct) => i * 2) precisa de ser alterada para usar Select em vez de SelectAwait, como em e.Select(async (int i, CancellationToken ct) => i * 2).
Para o conjunto completo de métodos de extensão LINQ disponíveis para IAsyncEnumerable<T>, consulte a documentação da API System.Linq.AsyncEnumerable.