Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Entity Framework 6.1.3 ASP.Net异步数据库调用比同步数据库调用慢得多_C#_Asp.net_Asynchronous_Async Await - Fatal编程技术网

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();
}