関連: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 を使用すると、接続プールに対する脅威になりますか? これはアンチパターンですか?