1

这是场景:

我有一个使用ManualWorkflowScheduler的状态机工作流。假设有 2 个状态:State1State2。State1 包含一个EventDrivenActivity1,它有一个SetStateActivity1将工作流从 State1 移动到 State2。State1 也有一个 StateFinalizationActivity1。

所以我的问题是:

当引发事件并且 SetStateActivity1 执行并将工作流的状态更改为 State2 时,StateFinalizationActivity1 是否在与引发导致状态更改的事件的方法相同的线程(作为调用的一部分)上执行(意思是 - 调用方方法是否具有等到 EventDrivenActivity1 和 StateFinalizationActivity1 的序列都执行了,还是在 EventDrivenActivity1 执行后返回,StateFinalizationActivity1 将在返回后执行)?

4

2 回答 2

1

使用 ManualWorkflowScheduler 时,可以执行的所有内容都将在当前线程上执行。因此,工作流将继续并一直运行,直到其处于下一个状态并空闲。

于 2009-11-20T10:27:02.470 回答
1

我猜使用“终结”这个词可能会让一些人想到 CLR 终结,它将在不同的线程上运行。然而,这是非常不同的概念。

当 SetStateActivity 被击中时,会发生以下序列:-

  • 当前状态下的其他当前正在执行的活动将运行它们的取消处理中的任何活动。
  • StateFinalization 中的活动将执行
  • 状态转换到新状态
  • 新状态下的任何活动初始化活动将运行
  • 状态正文中的事件活动被输入。

以上所有操作都在当前线程上按顺序操作。

于 2009-11-20T12:09:56.243 回答