State machine 状态机:在哪个状态下执行转换操作?

State machine 状态机:在哪个状态下执行转换操作?,state-machine,spring-statemachine,State Machine,Spring Statemachine,我只是在读状态机理论。请考虑以下事项: event[guard]/action State A -----------------------------> State B 我的问题是:如果我定义了状态a和状态B之间的转换,包括事件、保护和动作,如上面的“图片”;此外,接收到事件,并且保护表达式的计算结果为true,那么:当我的对象处于状态A或B时,是否执行该操作 换句话说,我是否需要将操作配置为可在状态A或B下执行(假设我只想选择一个可执行操作的状态) 谷歌发

我只是在读状态机理论。请考虑以下事项:

             event[guard]/action
State A -----------------------------> State B
我的问题是:如果我定义了状态a和状态B之间的转换,包括事件、保护和动作,如上面的“图片”;此外,接收到事件,并且保护表达式的计算结果为true,那么:当我的对象处于状态A或B时,是否执行该操作

换句话说,我是否需要将操作配置为可在状态A或B下执行(假设我只想选择一个可执行操作的状态)

谷歌发现告诉我,该行动将在过渡的确切时间执行;但我的大脑很难接受它:在我看来,我的对象在执行动作时需要处于特定的状态(只是因为我的对象需要始终处于特定的状态)。执行该操作可能需要一段时间


相关:如果在执行操作期间发生错误,会发生什么情况。我的对象将保持在状态A,还是将以任何方式转换到状态B(请记住,已接收到事件且guard表达式的计算结果为true)?

这很容易通过自定义进行检查,在自定义中,您将覆盖进入/退出状态和转换的相应方法

当我的对象处于状态A或B时,是否会执行该操作

您的操作(正在转换)将在您处于状态A时执行。 发生的顺序如下:

Started transition
State Entered: A
SM changed states from:null to: A
Ended transition
---
Executing guard logic
Started transition
Executing normal action //action is executed before exiting State A
State exited: A
State Entered: B
SM changed states from:A to: B
Ended transition
如果在执行操作过程中发生错误,会发生什么情况。 我的对象将保持在状态A,还是将转换到状态B 无论如何

你将留在A州


正如您在上面的输出中所看到的,状态的退出发生在操作执行(成功)之后。如果在此之前发生异常,您仍将处于状态A。

这很容易通过自定义进行检查,在自定义中,您将覆盖进入/退出状态和转换的相应方法

当我的对象处于状态A或B时,是否会执行该操作

您的操作(正在转换)将在您处于状态A时执行。 发生的顺序如下:

Started transition
State Entered: A
SM changed states from:null to: A
Ended transition
---
Executing guard logic
Started transition
Executing normal action //action is executed before exiting State A
State exited: A
State Entered: B
SM changed states from:A to: B
Ended transition
如果在执行操作过程中发生错误,会发生什么情况。 我的对象将保持在状态A,还是将转换到状态B 无论如何

你将留在A州

正如您在上面的输出中所看到的,状态的退出发生在操作执行(成功)之后。如果在此之前发生异常,您仍将处于状态A