异步MVC控制器

时间:2016-12-21 08:17:27

标签: c# entity-framework entity-framework-6 async-await

考虑遵循异步MVC控制器方法(数据库中有~100,000个客户):

public async Task<IEnumerable<Customer>> GetCustomerss()
{
    var query = dbContext.Set<Customer>();
    Debug.WriteLine("Getting customers");
    var task = query.ToListAsync();
    Debug.WriteLine("After getting customers task");
    var taskRes = await task;
    Debug.WriteLine("After awaiting customers");

    var query2 = dbContext.Set<Customer>();
    Debug.WriteLine("Getting customers 2");
    var task2 = query2.ToListAsync();
    Debug.WriteLine("After getting customers task 2");
    var taskRes2 = await task2;
    Debug.WriteLine("After awaiting customers 2");

    return taskRes2;
}

问题在于,在两个块(查询和查询2)中,线程与ToListAsync()一起挂起大约10秒钟,之后(打印时#34;获取客户任务后...&#34;任务状态是RanToCompletion。 似乎await不是await关键字所在的位置。

我知道EF6上下文不是线程安全的,这只是一个示例代码。 db是在Azure上托管的SQL Server 2014。 ToListAsync()是System.Data.Entity;

的扩展方法

更新:似乎我错过了一件重要的事情 - 应用程序使用MiniProfiler,并且它可能是问题的根源,如下所示: How to make Entity Framework execute asynchronously

0 个答案:

没有答案