考虑遵循异步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