Entity Framework 6.1.3. Асинхронный вызов базы данных ASP.Net значительно медленнее, чем синхронный

Я тестирую вызовы базы данных с 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();
}

Синхронный:

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

0 ответов

Другие вопросы по тегам