Не будучи поточно-ориентированным, обычно означает, что не используйте его из нескольких потоков одновременно , а не используйте его из одного потока, а затем из другого потока позже.
Я не знаю конкретно о NHibernate, но если это проблема, подумайте об использовании EF Core.
Как правило, в асинхронном режиме не используйте переменные, привязанные к конкретным потокам, например, локальный поток или статический поток.
Однако локальные переменные, члены класса, контексты логического вызова, HttpContext
, если вы находитесь на asp.net и т. Д., Продолжают работать. Если у вас есть что-то, что будет потеряно после await
, вы можете сначала просто сохранить его в локальной переменной.
Значение по умолчанию ConfigureAwait(true)
также восстанавливает некоторый контекст в продолжении, но может быть трудно понять, что восстанавливается, а что нет. Более поздние версии .net справляются с этой задачей лучше, например, восстанавливая культуру, чтобы ресурсы продолжали работать после await
.
Здесь есть хорошая статья Стивена Туба:
https://blogs.msdn.microsoft.com/pfxteam/2012/06/15/executioncontext-vs-synchronizationcontext/