我可以(或应该)在Web API控制器中使用IAsyncEnumerable<T&>;而不是Task<ActionResult<IEnumera

编程入门 行业动态 更新时间:2024-10-20 06:37:17
本文介绍了我可以(或应该)在Web API控制器中使用IAsyncEnumerable<T&>;而不是Task<ActionResult<IEnumerable<T>>>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我当前有一个Web API,

  • 使用存储库中的FromSqlRaw(...).ToListAsync()提取一行数据
  • 通过控制器将此数据作为Ok(data.ToArray())作为Task<ActionResult<IEnumerable<MyClass>>>返回。

现在我想知道是否应该或可以使用IAsyncEnumerable作为返回类型。我们的想法是在存储库和控制器中使用它。但是,在这个(现已老化)thread中,它声明不应该使用它。这里建议的解决方案类似于:

FromSqlRaw(...).AsNoTracking().AsAsyncEnumerable()

对于控制器,我希望将响应用ActionResult包装起来,以显式设置返回代码。但是,that当前似乎不起作用。

我应该仅将解决方案应用于存储库并在控制器中以列表形式使用结果,还是仅保持其原样?

推荐答案

IAsyncEnumerable为您提供了一个pull-based asynchronous取数界面。换言之,此API表示一个迭代器,在该迭代器中异步获取下一项。

这意味着您将分几轮接收数据,并且每轮都以异步方式接收。

  • 在IAsyncEnumerable之前,您可以使用IEnumerable<Task<T>>,它表示一组返回类型为T的异步操作。

  • ,而Task<IEnumerable<T>>表示返回类型为IEnumerable<T>的单个异步操作。

让我们将这些知识应用于WebAPI:

  • 从HTTP消费者的角度看,Task<ActionResult<T>>和ActionResult<T>没有区别。这是从用户角度看的实现详细信息。
  • WebAPI控制器的操作实现请求-响应模型。这意味着在消费者端发送单个请求并接收单个响应。
  • 如果使用者再次调用同一操作,则将实例化一个新控制器,并将处理该请求。

这意味着如果API作为操作结果类型公开,则API的使用者无法利用IAsyncEnumerable。

更多推荐

我可以(或应该)在Web API控制器中使用IAsyncEnumerable&lt;T&>;而不是Task&lt;ActionRe

本文发布于:2023-11-14 15:19:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1587787.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:而不是   器中   IAsyncEnumerable   amp   API

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!