Является ли NHibernate SessionFactory потокобезопасным - PullRequest
3 голосов
/ 20 января 2011

В соответствии с документацией SessionFactory должен быть потокобезопасным:

ISessionFactory является потокобезопасным, многие потоки могут получать к нему доступ одновременно и запрашивать ISessions.в реализации, и я не могу понять, как, например, OpenSession () может быть потокобезопасным:

http://nhibernate.svn.sourceforge.net/viewvc/nhibernate/trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs?revision=5233&view=markup

Есть несколько вызовов lock (), но ничего в OpenSession () нет.Все реализации без блокировки потока, которые я смог найти, были в основном одиночными.

1 Ответ

2 голосов
/ 20 января 2011

OpenSession просто возвращает новый объект и передает поля из SessionFactoryImpl.Эти поля, кажется, не изменяются в любом месте (за исключением конструктора), так что это кажется потокобезопасным.Предварительным условием является то, что settings.CacheProvider.NextTimestamp() и sessionLocalInterceptor.SetSession(session); также являются поточно-ориентированными, поскольку они потенциально могут быть изменены в некоторых из перегруженных вызовов OpenSession.

Есть место для некоторых условий гонки по крайней мере на .Dispose / .Close.1005 *

...