Flow Framework:@Signal 的行为如何,可用于执行一些动态任务,这些任务会改变 SWF 中的执行流程
Flow Framework: How does @Signal behave and can be used to perform some dynamic tasks, which change the execution flow in SWF
我对流框架研究的一些观察是:
一旦收到信号,@Signal 就开始在决策重播中执行。 @Signal 方法在同一工作流的所有未来重放中执行。 (一旦收到信号,在每次重播时,决策者都会执行@Signal)。 @Asynchronus 方法不应该是长 运行 任务,因为决策者将仅在所有 @Asynch 方法完成执行后才安排 Activity 任务。
我的观察是否正确?如果是:那么如果在同一个工作流中我想要一个信号,该信号执行一些任务然后停止执行以供将来重播。例如暂停信号:用户可能会多次暂停和恢复工作流程。
另外一个问题是:flow是如何处理以下几种情况的:一个decider超时,同时来了两个事件:Cancel workflow和ActivityCompleted。决策者如何确定它们是相关的,如果取消已完成,则不响应 ActivityComplatedEvent。
不考虑重播方面的工作流行为会有所帮助。重放只是一种恢复工作流状态的机制。但是,当编写工作流逻辑时,除了确定性要求之外,它并不是真正可见的,并且工作流代码是异步和非阻塞的。因此,在设计您的工作流逻辑时,永远不要考虑重播。把它写成一个本地执行的异步程序。
因此,当重播不是以某种方式时,@Signal 只是一个回调方法,每个接收到的信号执行一次。因此,如果您从 @Signal 方法调用某些操作,那么它将执行一次。
至于第二个问题,取决于收到取消和activity完成的顺序。如果首先取消,则首先将取消传送到工作流,这可能会导致取消 activity。取消其实就是阻塞等待activity取消。完成 activity(这是下一个事件)取消阻止它的取消。如果完成是第二个,那么 activity 完成并且接下来的任何事情都被下一个事件取消。在大多数情况下,结果与接收到 activity 完成完全相同,但之后的所有逻辑都被取消。
我对流框架研究的一些观察是:
一旦收到信号,@Signal 就开始在决策重播中执行。 @Signal 方法在同一工作流的所有未来重放中执行。 (一旦收到信号,在每次重播时,决策者都会执行@Signal)。 @Asynchronus 方法不应该是长 运行 任务,因为决策者将仅在所有 @Asynch 方法完成执行后才安排 Activity 任务。
我的观察是否正确?如果是:那么如果在同一个工作流中我想要一个信号,该信号执行一些任务然后停止执行以供将来重播。例如暂停信号:用户可能会多次暂停和恢复工作流程。
另外一个问题是:flow是如何处理以下几种情况的:一个decider超时,同时来了两个事件:Cancel workflow和ActivityCompleted。决策者如何确定它们是相关的,如果取消已完成,则不响应 ActivityComplatedEvent。
不考虑重播方面的工作流行为会有所帮助。重放只是一种恢复工作流状态的机制。但是,当编写工作流逻辑时,除了确定性要求之外,它并不是真正可见的,并且工作流代码是异步和非阻塞的。因此,在设计您的工作流逻辑时,永远不要考虑重播。把它写成一个本地执行的异步程序。
因此,当重播不是以某种方式时,@Signal 只是一个回调方法,每个接收到的信号执行一次。因此,如果您从 @Signal 方法调用某些操作,那么它将执行一次。
至于第二个问题,取决于收到取消和activity完成的顺序。如果首先取消,则首先将取消传送到工作流,这可能会导致取消 activity。取消其实就是阻塞等待activity取消。完成 activity(这是下一个事件)取消阻止它的取消。如果完成是第二个,那么 activity 完成并且接下来的任何事情都被下一个事件取消。在大多数情况下,结果与接收到 activity 完成完全相同,但之后的所有逻辑都被取消。