我正在开发OData端点,以从数据库中返回项目列表。
我要返回IQueryable
,并让前端通过odata查询选项处理查询/过滤/扩展/分页。
请考虑以下方法:
[ODataRoute]
[EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All)]
public IActionResult Get() {
return Ok(context.Vendors.AsQueryable());
}
我知道实际上并不需要async
,因为这里没有具体查询。
在这种情况下,查询何时实现?
是以异步方式完成的吗?
答案 0 :(得分:1)
您问了几个问题,我会尽力回答所有问题并澄清一些问题。
我知道确实不需要异步
从未真正需要异步,问题是异步将使您的应用程序受益。例如,当对DbContext进行调用时,有些网络操作会花费一些时间。如果在此期间不使用异步,则线程将等待响应,而不是返回线程池来处理其他请求。
是的,它不是必需的,但可能很有用。
在这种情况下,查询何时实现?
当访问端点时,查询将在中间件中实现。
是以异步方式完成的吗?
否,当您传递Queryable时,您只是将执行推迟到以后仍然可以同步完成,您需要使用async / await模式才能异步执行某事
答案 1 :(得分:0)
您的查询将在序列化过程中实现。访问您的方法时,要以JSON返回响应,序列化程序将尝试序列化结果。那时,您的查询实际上命中了数据库并返回了结果。 由于未应用任何过滤器,并且您的查询试图从数据库中检索所有记录,因此该应用程序可能运行缓慢。