假设您正在设计一个具有两个子系统的系统:一个是状态机A
,另一个是功能子系统B
。子系统B
具有doAsync()
之类的方法,它们执行某些操作,然后将完成或错误事件返回给系统A
。
现在,子系统A可以从其他外部系统接收事件,例如ModeChange
,这会导致更改为正确的状态。
这是问题所在。假设子系统A
处于状态AA
,它调用函数doAsync()
并等待完成事件。然而,在收到完成事件之前,我收到一个ModeChange
事件,现在将子系统A
推送到状态AB
。但是,doAsync()
的完成事件现在已在州AB
而非AA
上收到,因此被捕获为意外事件。
解决此问题的最佳方法是什么?
以下是一些可能的解决方案和我的想法:
B
中的每个异步操作实施取消操作。我不想这样做,因为它增加了很多工作。这会增加系统B
的复杂性。