O problema é este:
O EF não dá suporte ao processamento de várias solicitações por meio do mesmo objeto DbContext. Se sua segunda solicitação assíncrona na mesma instância de DbContext for iniciada antes da conclusão da primeira solicitação (e esse é o ponto principal), você receberá uma mensagem de erro informando que sua solicitação está sendo processada em um DataReader aberto.
Fonte:https://visualstudiomagazine.com/articles/2014/04/01/async-processing.aspx
Você precisará modificar seu código para algo assim:
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);
}