[英]Where is the ViewResult returned by ASP.NET Core Controller consumed?
[英]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 沒有特別對待IAsyncEnumerable
或IQueryable
。 它遵循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.