我有一个状态机,如下所示。我已经在 C# 中使用Stateless实现了这一点。
在触发的On
情况下,状态可以重新进入。RequestStatus
发生这种情况时,状态机可以处于以下任何状态On
:On > Standby
或On > Operational
。现在,对于这个触发器,当前状态应该保持原样,并且应该只返回状态,即执行ReturnStatus()
。
OnEntryFrom(Trigger, Action)
可以使用该方法执行取决于触发器的功能。但问题是,如果我设置OnEntryFrom
了On
状态,每次触发触发器时,如果其中任何一个子状态都处于活动状态,则它们首先退出,然后On
退出状态,然后OnEntry
出现On
状态。
现在我想要的是,无论状态机处于激活状态的 3 个状态中的哪一个,对于RequestStatus
触发器,只需执行该ReturnStatus()
方法即可。
我可以做到这一点的一种方法是设置OnEntryFrom(PowerOn, () => Initialize())
和OnEntryFrom(RequestStatus, () => ReturnStatus())
。通过添加新触发器对子状态执行相同操作,StandbyRequestStatus
并OperationalRequestStatus
根据之前激活的触发器来触发它们。我认为这很乏味,尤其是在子状态数量增加的情况下。
另一种方法是保留子状态并只处理一次。但我找不到在无状态中做到这一点的方法。
使用无状态可以实现吗?有没有人这样做过?