C# Entity Framework 6.1.3 ASP.Net异步数据库调用比同步数据库调用慢得多
我正在使用C# Entity Framework 6.1.3 ASP.Net异步数据库调用比同步数据库调用慢得多,c#,asp.net,asynchronous,async-await,C#,Asp.net,Asynchronous,Async Await,我正在使用Include测试数据库调用,并注意到我的async代码与同步代码相比运行得非常慢。考虑到同步代码的速度几乎快了五倍,我假设我犯了严重的错误,但我无法发现它。查看代码时,我似乎在等待应该正确的ToListAsync()。我做错了什么?这是正常的行为吗 注意:缩小示例以仅关注一个数据库调用,async在示例中是不必要的,但仍然存在时差 异步: [HttpGet] [Route("{bsid}/{caseId}/async")] public async Task<IHttpActi
Include
测试数据库调用,并注意到我的async
代码与同步代码相比运行得非常慢。考虑到同步代码的速度几乎快了五倍,我假设我犯了严重的错误,但我无法发现它。查看代码时,我似乎在等待应该正确的ToListAsync()
。我做错了什么?这是正常的行为吗
注意:缩小示例以仅关注一个数据库调用,async
在示例中是不必要的,但仍然存在时差
异步:
[HttpGet]
[Route("{bsid}/{caseId}/async")]
public async Task<IHttpActionResult> GetAsync(string bsid, int caseId)
{
var db = new DbContext();
var deviations = await db.RenewalCycles.Where(x => x.Deviations.Any())
.Include(cycle => cycle.TPCase.CaseNames.Select(caseName => caseName.TPName))
.Include(cycle => cycle.TPCase.CaseNames.Select(caseName => caseName.TPNameType))
.Include(cycle => cycle.TPCase.GoodsAndServicesDescriptions)
.Include(cycle => cycle.TPCase.RelatedCases.Select(relatedCase => relatedCase.TPCaseRelation))
.Include(cycle => cycle.TPCase.RelatedCases.Select(relatedCase => relatedCase.TPCountry))
.ToListAsync();
return Ok();
}
一个问题的可能重复-如果您只是等待异步,那么使用异步有什么意义?您可以使用同步方法,代码流将是相同的。@PeterB谢谢,我没有看到这个问题。@ADyson代码只是为了演示。缩小它,以便能够测试隔离的方法,并且认为时间差很大。您仍然在等待同步操作中的单个异步方法。您是说实际上您计划异步运行多个查询,而不单独等待每个查询吗?那可能更有意义。
[HttpGet]
[Route("{bsid}/{caseId}")]
public IHttpActionResult Get(string bsid, int caseId)
{
var db = new DbContext();
var deviations = db.RenewalCycles.Where(x => x.Deviations.Any())
.Include(cycle => cycle.TPCase.CaseNames.Select(caseName => caseName.TPName))
.Include(cycle => cycle.TPCase.CaseNames.Select(caseName => caseName.TPNameType))
.Include(cycle => cycle.TPCase.GoodsAndServicesDescriptions)
.Include(cycle => cycle.TPCase.RelatedCases.Select(relatedCase => relatedCase.TPCaseRelation))
.Include(cycle => cycle.TPCase.RelatedCases.Select(relatedCase => relatedCase.TPCountry))
.ToList();
return Ok();
}