ISessionFactory.OpenSession () из нескольких потоков - PullRequest
4 голосов
/ 12 августа 2011

Я хотел бы знать поведение следующего.

В основном у меня есть статическая ISessionFactory и приложение с 10 запущенными потоками, и каждый из них будет использовать ISessionFactory.OpenSession () для получения ISession. Может ли это вызвать какие-либо проблемы?

Ответы [ 3 ]

4 голосов
/ 12 августа 2011

Нет. Это правильно. Вы хотите убедиться, что у вас есть отдельный сеанс для каждого потока.

1 голос
/ 12 августа 2011

Это не вызовет никаких проблем, но убедитесь, что:

  • вы не «пропускаете» экземпляр ISession (другие потоки никогда не будут к нему иметь доступ)

  • вы правильно утилизируете сеанс, когда он вам больше не нужен

ISessionFactory с другой стороны является поточно-ориентированным и может использоваться из нескольких потоков без дополнительной синхронизации с вашей стороны.

using(ISession session = _sessionFactory.OpenSession()) {
    // use session making sure it will not become visible to other threads
}
1 голос
/ 12 августа 2011

SessionFactory является потокобезопасным, но не Session.Так что, если вы откроете сеанс с ISessionFactory.OpenSession () в потоке и будете использовать его там (в этом потоке) без совместного использования с другим потоком, вы можете перейти.

Но не используйте ISessionFactory.GetCurrentSession () среди нескольких терад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...