簡體   English   中英

IAsyncEnumerable 有什么區別<T>與 IEnumerable <Task<T> &gt;?

[英]Whats the difference between IAsyncEnumerable<T> vs IEnumerable<Task<T>>?

新的 C# 8.0 和 dotnet core 3 具有 AsyncStreams ( IAsyncEnumerable<T> ) 的這一新功能。 我的理解是它提供了一種異步處理流中項目的方法。 但是我不能用IEnumerable<Task<T>>做到這一點嗎?

這兩種方法有什么區別?

Task<IEnumerable<T>>IAsyncEnumerable都用於枚舉數據或遍歷數據列表。 然而還是有很大的不同。 一旦集合中的數據准備好發送給調用者, Task<IEnumerable<T>>提供記錄。

IAsyncEnumerable在記錄准備好時提供記錄,這意味着它會將記錄作為可用記錄發送給您,而不是等待整個集合被填滿。 它使您可以使用 yield 關鍵字異步迭代集合,這在 C# 8.0 之前是不可能的。

在使用異步枚舉時,了解哪些線程是安全的,哪些是不安全的,這一點很重要。

使用 IEnumerable<Task> 返回類型,您將返回阻塞枚舉器,盡管單個結果是非阻塞的。

使用 IAsyncEnumerable 枚舉器本身是非阻塞的,為枚舉源的異步提供更大的靈活性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM