簡體   English   中英

在 ASP.NET 核心 6 中,是否由異步枚舉的 controller 操作返回的 IQueryable?

[英]In ASP.NET Core 6, is an IQueryable returned by a controller action enumerated asynchronously?

我的問題類似於使 Web API controller 從 2013 年返回一個異步的 IQueryable 列表(當我調用 ToListAsync()時) 我想特別關注多個用戶(包括備受推崇的Stephen Cleary )的聲明,即“沒有必要”顯式地異步枚舉IQueryable

我知道在最近版本的 ASP.NET 內核中,一個 controller 可以返回一個IAsyncEnumerable並且它將被異步枚舉。 答案僅僅是框架對IQueryable做同樣的事情嗎?

並且為了解決可能是一個簡單的答案, IAsyncEnumerable 的無緩沖流式傳輸的潛在問題是否也適用於IQueryable

IQueryable不擴展IAsyncEnumerable ,但IQueryable的運行時類型可能是IAsyncEnumerable AsAsyncEnumerable的實現暗示了這一點。

ASP.NET Core 沒有特別對待IAsyncEnumerableIQueryable 它遵循System.Text.Json以根據其運行時類型序列化 object。 我們可以通過搜索源代碼來了解它是如何工作的。

System.Text.Json並沒有特別對待IQueryable 如果它恰好是一個IAsyncEnumerable ,它將被視為這樣。 否則,它將作為IEnumerable同步枚舉。 所以如果你想要這個默認行為,一個 controller 動作可以簡單地返回一個IQueryable (或Task<IQueryable>等)

修改返回類型的唯一原因是如果您知道IQueryable是一個IAsyncEnumerable並且您希望避免流式傳輸的潛在復雜性 在這種情況下,調用ToListAsync以在 controller 中實現結果。

暫無
暫無

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

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