2

我有一个状态机,如下所示。我已经在 C# 中使用Stateless实现了这一点。

在触发的On情况下,状态可以重新进入。RequestStatus发生这种情况时,状态机可以处于以下任何状态OnOn > StandbyOn > Operational。现在,对于这个触发器,当前状态应该保持原样,并且应该只返回状态,即执行ReturnStatus()

OnEntryFrom(Trigger, Action)可以使用该方法执行取决于触发器的功能。但问题是,如果我设置OnEntryFromOn状态,每次触发触发器时,如果其中任何一个子状态都处于活动状态,则它们首先退出,然后On退出状态,然后OnEntry出现On状态。

现在我想要的是,无论状态机处于激活状态的 3 个状态中的哪一个,对于RequestStatus触发器,只需执行该ReturnStatus()方法即可。

我可以做到这一点的一种方法是设置OnEntryFrom(PowerOn, () => Initialize())OnEntryFrom(RequestStatus, () => ReturnStatus())。通过添加新触发器对子状态执行相同操作,StandbyRequestStatusOperationalRequestStatus根据之前激活的触发器来触发它们。我认为这很乏味,尤其是在子状态数量增加的情况下。

另一种方法是保留子状态并只处理一次。但我找不到在无状态中做到这一点的方法。

使用无状态可以实现吗?有没有人这样做过?

使用无状态状态机

4

0 回答 0