Я использую Spring.NET и NHibernate уже несколько лет, и я очень доволен.Тем не менее, я всегда играл с многопоточностью, Reactive Extensions и в конечном итоге Task Parallel Library, которая является отличным фреймворком.К сожалению, все виды многопоточных подходов терпят неудачу из-за сеанса NHiberntate, который не является потокобезопасным.
Я спрашиваю вас, как я могу извлечь выгоду из параллельного программирования и все еще использовать NHibernate.
Например: у меня естьCustomerRegistrationService
класс, метод которого Register
выполняет несколько задач:
ICustumer customer = this.CreateCustomerAndAdresses(params);
this.CreateMembership(customer);
this.CreateGeoLookups(customer.Address);
this.SendWelcomeMail(customer);
Последние два метода были бы идеальными кандидатами для параллельной работы, CreateGeoLookups
вызывает некоторые веб-службы для определения географического местоположения адреса клиентаи создает некоторые новые объекты, а также обновляет самого клиента.SendWelcomMail
делает то, что говорит.
Поскольку CreateGeoLookups
использует NHibernate (хотя через объекты репозитория, поэтому NHibernate скрыто через Interfaces / Dependency Inection), он не будет работать с Task.Factory.StarNew (...) или другие механизмы Threading.
Мой вопрос не в том, чтобы решить эту самую проблему, которую я описал, но я хотел бы услышать от вас информацию о NHibenrate, Spring.NET и параллельных подходах.
Большое спасибо Макс