Vấn đề là đây:
EF không hỗ trợ xử lý nhiều yêu cầu thông qua cùng một đối tượng DbContext. Nếu yêu cầu không đồng bộ thứ hai của bạn trên cùng một cá thể DbContext bắt đầu trước khi yêu cầu đầu tiên kết thúc (và đó là toàn bộ điểm), bạn sẽ nhận được thông báo lỗi rằng yêu cầu của bạn đang xử lý đối với DataReader đang mở.
Nguồn:https://visualstudiomagazine.com/articles/2014/04/01/async-processing.aspx
Bạn sẽ cần sửa đổi mã của mình thành một cái gì đó như sau:
async Task<List<E1Entity>> GetE1Data()
{
using(var MyCtx = new MyCtx())
{
return await MyCtx.E1.Where(bla bla bla).ToListAsync();
}
}
async Task<List<E2Entity>> GetE2Data()
{
using(var MyCtx = new MyCtx())
{
return await MyCtx.E2.Where(bla bla bla).ToListAsync();
}
}
async Task DoSomething()
{
var t1 = GetE1Data();
var t2 = GetE2Data();
await Task.WhenAll(t1,t2);
DoSomething(t1.Result, t2.Result);
}