問題はこれです:
EFは、同じDbContextオブジェクトを介した複数の要求の処理をサポートしていません。同じDbContextインスタンスでの2番目の非同期リクエストが最初のリクエストが終了する前に開始された場合(そしてそれが全体のポイントです)、リクエストが開いているDataReaderに対して処理中であるというエラーメッセージが表示されます。
出典:https://visualstudiomagazine.com/articles/2014/04/01/async-processing.aspx
コードを次のように変更する必要があります:
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);
}