Cách chính xác để sử dụng các phương thức loại linq với IAsyncEnumerable là gì?


8

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ì?


4
Nếu bạn định gọi ToList hoặc Count - thì điểm quan trọng của việc sử dụng phương thức liệt kê async là gì?
stuartd

4
Tại sao điều này bị đóng cửa? Đó là một câu hỏi hay và rõ ràng.
Stuart

3
Vui lòng bỏ phiếu để mở lại câu hỏi này có ý nghĩa hoàn hảo và như bạn có thể thấy nó có câu trả lời đơn giản
Stilgar

Cảm ơn @Stilgar, tôi không biết đó là một điều
Stuart

Câu trả lời:


7

Đâ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ư SelectAwaitWhereAwaitvv ...


Các phương pháp có sử dụng như nó là. Điều gì sẽ xảy ra nếu tôi được trao một API là IAsyncEnumerable nhưng tôi không thực sự quan tâm đến tính không đồng bộ của nó? Tôi có nên bị buộc phải tự mình đếm (đó có lẽ là điều mà CountAsync vẫn làm)?
Stilgar

Bạn phải quan tâm đến tính không đồng bộ của nó, bạn không thể từ chối, nó giống như một asyncphương pháp. Đừng chặn nó, trừ khi bạn hoàn toàn biết bạn đang làm gì.
Stuart

Nhưng CountAsync không chặn. Bạn chỉ đang chờ chuỗi đầy đủ. Nếu bạn chờ đợi-foreach và sau đó đếm vào một biến, nó sẽ có tác dụng tương tự.
Stilgar

Vâng, tôi không nghĩ rằng tôi đã hiểu nhận xét đầu tiên của bạn sau đó
Stuart
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.