我们将状态机实现为Windows工作流程。这个想法应该是直截了当的:
我们的团队正在学习世界自然基金会。我们发现可以创建书签以暂停和卸载工作流程。然后可以通过ID加载工作流并恢复书签来恢复工作流程。
//start
var workflow = new WorkflowApplication(new MyWorkflow(), identity);
workflow.Run();
//run step 1, create bookmark in transition 1
//.....
//resume
var workflow = new WorkflowApplication(new MyWorkflow(), identity);
workflow.Load(id);
workflow.ResumeBookmark("step 2", obj);
//run step 2. finish
这部分有效。但现在我们要介绍第三步。转换2应该创建一个新书签,然后恢复工作流程以运行步骤3.
//run step 3
var workflow = new WorkflowApplication(new MyWorkflow(), identity);
workflow.Load(id);
workflow.ResumeBookmark("step 3", obj);
//run step 3. finish
但是这没有按预期工作。已加载工作流程,但恢复step 3
书签不会执行第3步活动。似乎工作流程只能处理1个书签,或者在使用step 2
恢复后,不会清除/删除转换1中的第一个书签。
我搜索了互联网,但我还没有找到有关此主题的足够信息。有很多在工作流程中使用单个书签的示例。但是工作流程中的多个书签都没有。
答案 0 :(得分:2)
我已经在WWF 4.5中使用StateMachine类型和大量书签而没有任何问题。我们的团队已经实施了帮助台类型的应用程序,因此书签被放置在Transitions的Action活动中。当工作流进入State时,将触发State的所有转换的所有Action活动并创建书签。恢复其中一个书签将清除所有其他博彩公司并将StateMachine移至另一个州,因此可以创建新的过渡和书签。
答案 1 :(得分:0)
假设您在所有书签创建中覆盖 CanInduceIdle ,您只需要在空闲时保留工作流程。在您的恢复代码中添加以下内容。
application.PersistableIdle = e => PersistableIdleAction.Persist;
application.PersistableIdle = e => PersistableIdleAction.Unload;