1

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

如果在一个状态上只有带有触发器的转换(实际上是一个将 CanInduceIdle 设置为 true 的 NativeActivity),到达该特定状态我创建书签,然后 WF 进入空闲状态,InstanceStore 会注意保持 WF 的状态。与其他条件一起发生无触发器转换会导致在不满足条件时重新安排所有转换,以防止 WF 进入空闲状态并被持久化。这是一个例子:

示例 1

当 WF 开始时(假设以对象 OBJ 作为 InArgument)它进入 State1,这里有 3 个转换:

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

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

示例 2

有什么方法可以评估无触发转换中的条件并在条件为假时让 WF 空闲?我还尝试放置共享环回转换以拦截错误情况(使用!条件)并延迟空闲并保持 WF,但似乎在这种情况下,没有保存活动书签。

有任何想法吗?

4

1 回答 1

3

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

于 2012-09-05T19:44:40.207 回答