具有条件转换的长时间运行状态机持久性

时间:2012-09-05 10:45:27

标签: workflow-foundation-4 workflow-foundation

我正在WF4中开发一个长时间运行的状态机,我无法找到一种方法来保持状态存在条件(无触发)转换。

如果在状态上只有带触发器的转换(实际上是带有CanInduceIdle的NativeActivity为true),到达该特定状态我创建书签,然后WF进入空闲状态,InstanceStore注意保持状态WF。在不满足条件的情况下进行无触发转换会导致所有转换的重新调度,从而阻止WF进入空闲状态并持续存在。 这是一个例子:

Example1

当WF启动时(假设对象OBJ为InArgument),它转到State1,这里有3个转换:

  1. 条件转换,用于评估条件中OBJ的属性
  2. 带有触发器的转换,触发器称为触发器接收对象OBJ2,用于修改在OBJ2中处理的OBJ WF
  3. 允许用户结束WF的过渡
如果在条件中评估的条件为真,则WF进入State2,在那里它可以进入空闲状态并被保持创建书签后。如果条件为假,则重新安排State1的所有转换(条件也是如此)并且不能保留WF。

我提出的唯一解决方案是,放置一个先前的状态,没有任何操作来评估条件,并将Trigger转换(可以修改我正在处理的对象)重新连接到BlankState以重新启动 - 评估无触发转换的条件。

Example2

有没有办法在无触发转换中评估条件,如果条件为假,让WF进入空闲状态? 我还尝试使用共享环回过渡来拦截错误情况(使用!条件)并将延迟置于空闲状态并保持WF,但在这种情况下,似乎没有保存活动书签。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

我怀疑是否有一种方法可以实现无触发转换,从而导致持续空闲。您可以创建一个评估条件的活动,然后导致空闲。