我的活动在执行期间不时抛出异常,所以我实现了Activity<TInstance>
的Faulted方法来处理它,放弃了Execute
方法中所做的更改。我认为在Automatonymous下面有一些布线,这使得当Execute
方法抛出异常然后为已经执行的活动调用Faulted方法时,Faulted方法执行。事实证明,没有这样的事情,因为我的Faulted方法永远不会被执行。
我应该在try / catch块中调用自己吗?我可以根据BehaviorExceptionContextProxy
生成BehaviorContext
并抛出异常。我可以通过的唯一下一个Behavior
将是插入Activity
的Execute
方法的那个,但逻辑上这意味着我正在补偿错误的方向,因为下一个Behavior
实际上是在这个成功之后被执行,所以我也会补偿许多。
我也尝试在状态机中使用Catch
,它确实处理异常,但是,当我只有ExceptionActivityBinder
存在时,我找不到任何方法来开始执行失败的活动的补偿流程。
是否有任何好方法可以触发活动的补偿流程?
状态机中的活动(使用Automatonymous)与Courier中的活动有很大不同。不幸的是,它们都有相同的名称,这可能会造成混乱。
当一个活动抛出异常时,将调用该行为中下一个活动的Faulted
方法。如果该方法是常规活动方法(例如.Then,.Publish等),则跳过它,因为这些活动的Faulted
方法只调用行为中的下一个活动。
然而,Catch
活动可用于捕获异常并执行救援行为(这是一系列活动)。
无论哪种方式,都不会调用在Execute方法中抛出异常的Faulted方法。所以是的,您应该使用try / catch,但允许异常从Execute方法流回来,以便行为正确处理它。