Насколько изолированы разные контексты выполнения друг от друга? Скажем, у нас есть два контекста выполнения ec1
и ec2
, оба используются в одном и том же пути кода, реализуя некоторое путешествие пользователя. Если, скажем, в ec2
начнутся голодания и сбои, останется ли ec1
неизменным?
Например, рассмотрим следующий сценарий, в котором мы хотим убедиться, что с пользователя была снята плата только один раз, запустив утверждение внутри Future
chargeUserF andThen { case _ =>
getNumberOfChargesF map { num => assert(num == 0) }
.andThen { case Failure(e) => logger.error("User charged more than once! Fix ASAP!", e) }
}
Здесь getNumberOfChargesF
не является обязательным для выполнения запроса пользователя, это просто побочная проблема, когда мы утверждаем ожидаемое состояние базы данных после того, как она была мутирована chargeUserF
. Поскольку нет необходимости, мне неловко добавлять его в основную бизнес-логику из-за страха, что это может каким-то образом нарушить основную логику. Если я запускаю getNumberOfChargesF
в контексте выполнения, отличном от используемого chargeUserF
, могу ли я предположить, что такие проблемы, как голодание, блокировка и т. Д., Вызванные getNumberOfChargesF
, не повлияют на основную бизнес-логику?