关于objectify的事务入队任务的问题

Questions about objectify's transactionally enqueued tasks

我对事务入队任务的工作方式和执行时间有一些疑问。

假设我在一个交易中按以下顺序进行一些操作:

  1. 写实体
  2. 写另一个实体
  3. 将工作添加到事务中的队列
  4. 写另一个实体

1) 如果其中一个写入实体操作失败,则整个事务失败。这是否意味着即使在第 4 步失败也不会排队?

2) 如果所有写操作都成功,工作什么时候加入队列?作为最后一步?或者只是按照它出现的顺序?

3) 如果向队列中添加工作失败,是不是整个事务都失败了,所有的写操作都回滚了?

1) 是的,如果事务回滚,则不会有任何工作入队。

2) 工作作为事务提交的一部分添加到队列中。执行时,排队的工作保证在post-事务状态下看到数据(当然,除非它被另外修改)。

3) 如果向队列添加工作失败(并且您没有捕获异常),异常将向上传播并导致事务回滚。