No parece haber ningún soporte linq incluido para IAsyncEnumerable empaquetado con .NET Core. ¿Cuál es la forma correcta de poder hacer cosas simples como ToList y Count?
No parece haber ningún soporte linq incluido para IAsyncEnumerable empaquetado con .NET Core. ¿Cuál es la forma correcta de poder hacer cosas simples como ToList y Count?
Respuestas:
Esta es una buena pregunta, ya que casi no hay elementos útiles en IntelliSense en IAsyncEnumerable<T>
con la referencia implícita del marco que tendría con una aplicación .NET Core predeterminada.
Se espera que agregue el paquete System.Linq.Async
(conocido como Ix Async, ver aquí ) como este:
<PackageReference Include="System.Linq.Async" Version="4.0.0" />
Entonces puedes usar CountAsync
, o 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 se señala en un comentario, estos métodos no son tan útiles en sí mismas, que deben utilizarse después de haber utilizado las características más potentes manteniendo sus datos como un flujo asíncrono, con cosas como SelectAwait
y WhereAwait
etc ...
async
método. No lo bloquee, a menos que sepa absolutamente lo que está haciendo.