【发布时间】:2021-03-05 23:20:13
【问题描述】:
我目前有一个网络 API
- 在存储库中使用
FromSqlRaw(...).ToListAsync()获取一行数据 - 通过控制器将此数据作为
Ok(data.ToArray())作为Task<ActionResult<IEnumerable<MyClass>>>返回。
现在我想知道是否应该或可以使用 IAsyncEnumerable 作为返回类型。这个想法是在存储库和控制器中使用它。然而,在这个(现在已经破旧)thread 中它声明它不应该被使用。这里建议的解决方案类似于:
FromSqlRaw(...).AsNoTracking().AsAsyncEnumerable()
至于控制器,我希望用ActionResult 包裹响应以明确设置返回码。但是,that 目前似乎不起作用。
我应该只为存储库应用解决方案并将结果作为列表在我的控制器中使用还是保持原样?
【问题讨论】:
-
我认为答案是 API 的使用者永远不会收到可等待的结果,而只会收到结果。
-
至于控制器,它永远不会,因为 JSON Parser 正在接收异步流并将其作为单一结果提供(已经有一个线程,但我现在找不到它) .我试图让我的存储库使用
System.linq的ToListAsync()将控制器使用的异步流返回到List<T>。它有效,但我不知道这是否会破坏IAsyncEnumerable的目的,因为它现在必须由控制器等待。
标签: entity-framework-core asp.net-core-webapi iasyncenumerable