状态机和异步消息传递,避免意外事件

时间:2017-06-15 20:18:16

标签: asynchronous design-patterns state-machine

假设您正在设计一个具有两个子系统的系统:一个是状态机A,另一个是功能子系统B。子系统B具有doAsync()之类的方法,它们执行某些操作,然后将完成或错误事件返回给系统A

现在,子系统A可以从其他外部系统接收事件,例如ModeChange,这会导致更改为正确的状态。

这是问题所在。假设子系统A处于状态AA,它调用函数doAsync()并等待完成事件。然而,在收到完成事件之前,我收到一个ModeChange事件,现在将子系统A推送到状态AB。但是,doAsync()的完成事件现在已在州AB而非AA上收到,因此被捕获为意外事件。

解决此问题的最佳方法是什么?

以下是一些可能的解决方案和我的想法:

  1. 对系统B中的每个异步操作实施取消操作。
  2. 我不想这样做,因为它增加了很多工作。这会增加系统B的复杂性。

    1. 忽略意外事件。 我不喜欢这个解决方案,因为它会隐藏其他问题。

0 个答案:

没有答案