私は以下の動作を知りたいと思います。ISessionFactory.OpenSession()複数スレッドから
基本的に私は静的なISessionFactoryと、実行中のスレッドが10個あるアプリケーションがあり、それぞれがISessionFactory.OpenSession()を使ってISessionを取得します。これは問題を引き起こすでしょうか?
私は以下の動作を知りたいと思います。ISessionFactory.OpenSession()複数スレッドから
基本的に私は静的なISessionFactoryと、実行中のスレッドが10個あるアプリケーションがあり、それぞれがISessionFactory.OpenSession()を使ってISessionを取得します。これは問題を引き起こすでしょうか?
いいえ。これは正しいです。スレッドごとに別々のセッションがあることを確認する必要があります。
SessionFactoryはスレッドセーフですが、Sessionではありません。したがって、スレッド内のISessionFactory.OpenSession()でセッションを開き、他のスレッドと共有せずにそのスレッド内で使用すると、安全に行くことができます。
しかし、複数のtheradsの中でISessionFactory.GetCurrentSession()を使用しないでください。
この問題は発生しますが、ことを確認してくださいません。ISessionインスタンスあなたが「リーク」していない
(他のスレッドが今までそれにアクセスすることができません)
あなたが適切にあなたはもはや一方ISessionFactory
using(ISession session = _sessionFactory.OpenSession()) {
// use session making sure it will not become visible to other threads
}
静的なISessionFactory.OpenSession()は常に新しいISessionを返します。 – Eatdoku
それは私の理解です、はい。 – csano