レポートを作成するとき、同じコンテキストの個別のエンティティを含む3つのクエリを実行する必要があります。それらはかなり重いものなので、並行して実行するために.ToListAsync();
を使用することにしましたが、驚いたことに、例外が発生しました...
EF 6を使用してクエリを並列で実行する正しい方法は何ですか?新しいタスクを手動で開始する必要がありますか?
編集1
コードは基本的に
using(var MyCtx = new MyCtx())
{
var r1 = MyCtx.E1.Where(bla bla bla).ToListAsync();
var r2 = MyCtx.E2.Where(ble ble ble).ToListAsync();
var r3 = MyCtx.E3.Where(ble ble ble).ToListAsync();
Task.WhenAll(r1,r2,r3);
DoSomething(r1.Result, r2.Result, r3.Result);
}
ドキュメントから:
SELECTおよびBULK INSERTステートメントのステートメントインターリーブが許可されます。ただし、データ操作言語(DML)およびデータ定義言語(DDL)ステートメントはアトミックに実行されます。
その後、上記のコードが機能し、データを読み取るためのパフォーマンス上の利点が得られます。