如何为自动状态机中使用的活动触发补偿流程的执行?
How to trigger the execution of the compensation flow for the activities used within an Automatonymous state machine?
我的活动在执行过程中不时抛出异常,所以我实现了 Activity<TInstance>
的 Faulted 方法来处理这个问题,放弃了在 Execute
方法中所做的更改。我认为 Automatonymous 中有一些底层连接使得 Faulted 方法在 Execute
方法抛出异常时执行,然后为已经执行的活动调用 Faulted 方法。事实证明没有这样的事情,因为我的错误方法从未执行过。
我应该自己在 try/catch 块中调用它们吗?我可以根据 BehaviorContext
生成 BehaviorExceptionContextProxy
并抛出异常。我唯一可以通过的下一个 Behavior
是插入到 Activity
的 Execute
方法中的那个,但从逻辑上讲,这意味着我在错误的方向上进行补偿,因为下一个 [=15] =]其实是在这个成功后执行,所以我补偿太多了。
我也尝试在状态机中使用Catch
,它确实处理了异常,但是,我找不到任何方法来开始执行[=30=的补偿流程] 当我只有 ExceptionActivityBinder
时失败了。
有什么好的方法可以触发活动的补偿流吗?
状态机(使用 Automatonymous)中的 activity 与 Courier 中的 activity 大不相同。不幸的是,它们同名,这会造成混淆。
当一个activity抛出异常时,会调用行为中下一个activity的Faulted
方法。如果该方法是常规 activity 方法(例如 .Then、.Publish 等),则会跳过它,因为这些活动的 Faulted
方法只是调用下一个 activity行为。
然而,Catch
activity 可用于捕获异常并执行救援行为(这是一系列活动)。
无论哪种方式,activity 的 Faulted 方法在 Execute 方法中抛出异常都不会被调用。所以是的,您应该使用 try/catch,但允许异常流回 Execute 方法,以便行为正确处理它。
我的活动在执行过程中不时抛出异常,所以我实现了 Activity<TInstance>
的 Faulted 方法来处理这个问题,放弃了在 Execute
方法中所做的更改。我认为 Automatonymous 中有一些底层连接使得 Faulted 方法在 Execute
方法抛出异常时执行,然后为已经执行的活动调用 Faulted 方法。事实证明没有这样的事情,因为我的错误方法从未执行过。
我应该自己在 try/catch 块中调用它们吗?我可以根据 BehaviorContext
生成 BehaviorExceptionContextProxy
并抛出异常。我唯一可以通过的下一个 Behavior
是插入到 Activity
的 Execute
方法中的那个,但从逻辑上讲,这意味着我在错误的方向上进行补偿,因为下一个 [=15] =]其实是在这个成功后执行,所以我补偿太多了。
我也尝试在状态机中使用Catch
,它确实处理了异常,但是,我找不到任何方法来开始执行[=30=的补偿流程] 当我只有 ExceptionActivityBinder
时失败了。
有什么好的方法可以触发活动的补偿流吗?
状态机(使用 Automatonymous)中的 activity 与 Courier 中的 activity 大不相同。不幸的是,它们同名,这会造成混淆。
当一个activity抛出异常时,会调用行为中下一个activity的Faulted
方法。如果该方法是常规 activity 方法(例如 .Then、.Publish 等),则会跳过它,因为这些活动的 Faulted
方法只是调用下一个 activity行为。
然而,Catch
activity 可用于捕获异常并执行救援行为(这是一系列活动)。
无论哪种方式,activity 的 Faulted 方法在 Execute 方法中抛出异常都不会被调用。所以是的,您应该使用 try/catch,但允许异常流回 Execute 方法,以便行为正确处理它。