5

関連:EntityFramework(6)と非同期(waitingForActivation)?

ただし、複数のアイテムを待機することには対応していません。1 つだけです。私の目標は、これらの線に沿って何かを達成することでした

var car = db.Cars.ToListAsync(); 
var people = db.People.ToListAsync(); 
Task.WhenAll(car,people);

残念ながら、この実行時例外が発生しました (本当に知っておくべきでした)

前の非同期操作が完了する前に、このコンテキストで 2 番目の操作が開始されました。このコンテキストで別のメソッドを呼び出す前に、「await」を使用して非同期操作が完了していることを確認します。インスタンス メンバーは、スレッド セーフであるとは限りません。

データベース コンテキストはスレッド セーフではありません。わかった。そのため、呼び出しをメソッドに分解し、両方のメソッド呼び出しを待機することを検討しています (または、これをデモする簡単な方法は、上記の各 db 呼び出しをusing(db){}ステートメントでラップすることです)。とにかく、問題は、そのパターンでは、それぞれに新しい DbContext が必要になることですToListAsync

ToListAsync 呼び出しごとに DbContext を使用すると、接続プールに対する脅威になりますか? これはアンチパターンですか?

4

1 に答える 1

5

ToListAsync 呼び出しごとに DbContext を使用すると、接続プールに対する脅威になりますか?

ごとに 1 つの接続を使用しますDbContext。シナリオによっては、これがオーバーサブスクライブする場合とそうでない場合があります。これは、予想される使用方法とデータベースの機能に大きく依存します。

これはアンチパターンですか?

必ずしも。これにより、両方のクエリが同時に実行されるため、DB に負担がかかります。利点は、クライアント側 (この場合、ASP.NET が DB のクライアント) のスループットが向上する可能性があることです。これは、余分な負担を上回る可能性があります測定は、DB への負担を上回るメリットがあるかどうかを知る唯一の方法です。

于 2013-10-31T18:16:46.177 に答える