web-dev-qa-db-ja.com

EF 6-並列クエリを正しく実行する方法

レポートを作成するとき、同じコンテキストの個別のエンティティを含む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);
}
14
Leonardo

チェックアウト https://docs.Microsoft.com/en-us/dotnet/framework/data/adonet/sql/enabling-multiple-active-result-sets

ドキュメントから:

SELECTおよびBULK INSERTステートメントのステートメントインターリーブが許可されます。ただし、データ操作言語(DML)およびデータ定義言語(DDL)ステートメントはアトミックに実行されます。

その後、上記のコードが機能し、データを読み取るためのパフォーマンス上の利点が得られます。

0
Siim Nelis