我正在开发一个 OData 端点以从数据库返回项目列表。
我正在返回一个 IQueryable
并让前端通过 odata 查询选项处理查询/过滤/扩展/分页。
考虑以下方法:
[ODataRoute]
[EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All)]
public IActionResult Get() {
return Ok(context.Vendors.AsQueryable());
}
我知道 async
并不是真正需要的,因为这里没有具体化查询。
在此上下文中,查询何时具体化?
它是以异步方式完成的吗?
最佳答案
你问了几个问题我会尽力回答所有问题并澄清几个问题。
I understand that async is not really needed
异步从来都不是真正需要的,问题是异步是否对您的应用程序有益。例如,当对 DbContext 进行调用时,有一些网络操作需要时间,如果您在此期间不使用异步,则线程将等待响应,而不是返回到线程池以处理其他请求。
所以是的,它不是必需的,但它可能很有用。
In this context, when is the query being materialized?
当端点被访问时,查询被具体化(在中间件中),
Is it being done in an asynchronous fashion?
不,当您传递 Queryable 时,您只是将执行推迟到稍后这仍然是同步完成的,您需要使用异步/等待模式才能异步执行某些操作
关于c# - OData IQueryable 是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708381/