c# - OData IQueryable 是异步的吗?

标签 c# asp.net-core entity-framework-core odata

我正在开发一个 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/

相关文章:

c# - EF 核心 : The INSERT statement conflicted with the FOREIGN KEY constraint

c# - 删除条款中的NOT-Linq-To-SQL

c# - JSON.NET 中对象集合的错误处理行为与简单类型不同

c# - 将对象绑定(bind)到 Web API 端点时指定自定义属性名称

c# - ASP.NET Core线程中默认的IServiceProvider安全吗?

c# - EF Core 通过相关 ID 查询数据

c# - 显示扩展的 SplashScreen 删除了我的后退按钮 C# UWP

c# - XML 中缺少标记会阻止 XmlSerializer 创建属性

node.js - typescript 文件更改后 JavaScript 文件未更新

c# - Entity Framework 依赖注入(inject)