Parece não haver nenhum suporte linq incluído para IAsyncEnumerable empacotado com o .NET Core. Qual é a maneira correta de ser capaz de fazer coisas simples, como ToList e Count?
Parece não haver nenhum suporte linq incluído para IAsyncEnumerable empacotado com o .NET Core. Qual é a maneira correta de ser capaz de fazer coisas simples, como ToList e Count?
Respostas:
Essa é uma boa pergunta, pois quase não há itens úteis no IntelliSense prontos IAsyncEnumerable<T>
para uso com a referência implícita da estrutura que você teria com um aplicativo .NET Core padrão.
Espera-se que você adicione o pacote System.Linq.Async
(conhecido como Ix Async, veja aqui ) assim:
<PackageReference Include="System.Linq.Async" Version="4.0.0" />
Então você pode usar CountAsync
, ou ToListAsync
:
async IAsyncEnumerable<int> Numbers()
{
yield return 1;
await Task.Delay(100);
yield return 2;
}
var count = await Numbers().CountAsync();
var myList = await Numbers().ToListAsync();
Como apontado em um comentário, esses métodos não são tão úteis por si só, eles devem ser usados depois que você usar os recursos mais poderosos, mantendo seus dados como um fluxo assíncrono, com coisas como SelectAwait
e WhereAwait
etc ...
async
método. Não bloqueie, a menos que você saiba absolutamente o que está fazendo.