Dường như không có bất kỳ hỗ trợ linq nào được bao gồm cho IAsyncEnumerable được đóng gói với .NET Core. Cách chính xác để có thể làm những việc đơn giản như ToList và Count là gì?
Dường như không có bất kỳ hỗ trợ linq nào được bao gồm cho IAsyncEnumerable được đóng gói với .NET Core. Cách chính xác để có thể làm những việc đơn giản như ToList và Count là gì?
Câu trả lời:
Đây là một câu hỏi hay, vì bên cạnh không có mục hữu ích nào trong IntelliSense IAsyncEnumerable<T>
ngoài hộp với tham chiếu khung ẩn mà bạn có với ứng dụng .NET Core mặc định.
Dự kiến bạn sẽ thêm gói System.Linq.Async
(biết là Ix Async, xem tại đây ) như thế này:
<PackageReference Include="System.Linq.Async" Version="4.0.0" />
Sau đó, bạn có thể sử dụng CountAsync
, hoặc 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();
Như đã chỉ ra trong một nhận xét, các phương thức này không hữu ích cho riêng chúng, chúng nên được sử dụng sau khi bạn đã sử dụng các tính năng mạnh hơn trong khi giữ dữ liệu của bạn dưới dạng luồng không đồng bộ, với những thứ như SelectAwait
và WhereAwait
vv ...
async
phương pháp. Đừng chặn nó, trừ khi bạn hoàn toàn biết bạn đang làm gì.