【发布时间】:2019-10-05 06:14:22
【问题描述】:
不同的执行上下文之间的隔离程度如何?假设我们有两个执行上下文 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 突变后断言数据库的预期状态。因为没有必要,我觉得将它添加到主要业务逻辑中感到不安,因为担心它会以某种方式破坏主要逻辑。如果我在与chargeUserF 使用的执行上下文不同的执行上下文中运行getNumberOfChargesF,我是否可以假设getNumberOfChargesF 引起的诸如饥饿、阻塞等问题不会影响主要业务逻辑?
【问题讨论】:
标签: scala crash future assertion