有没有更好的方法(1、2 或其他选项)?
乍一看,#2 听起来很有必要。使用书签(或某种类型的书签活动,如接收)的原因是它们可以随时恢复。这允许用户 Y 的研究结束并且工作流可以随时恢复执行(而不是在延迟到期之前被阻止)。
反驳的观点是,#1 也可能是必要的,您可能希望设置一个触发工作流操作的时间限制(提醒被触发、异常、取消等)。
如何决定?我认为答案通常是#3:两者
使用 Pick Activity 是兼顾两者的好方法。在一个 PickBranch 触发器中使用 Bookmarking 活动,并在另一个 PickBranch 触发器中使用 Delay 活动,您可以组成一个工作流,该工作流将“处理先发生者 - 用户 Y 或超时”。
您提出的第二个问题是“当我不希望它被卸载时,如何停止卸载工作流 - 意外工作流卸载风险”?
嗯,这取决于。如果您使用的是 WorkflowServiceHost,卸载工作流不会带来很大风险,因为 WorfklowServiceHost 足够聪明,可以在需要做更多工作时重新加载工作流(处理传入消息或从延迟中恢复)。
如果您没有使用 WorkflowServiceHost,您可能正在编写您的主机,您可以通过一些工作达到相同的效果,或者您可以阻止卸载发生 - 当您编写主机时,您可以通过事件控制卸载策略关于 WorkflowApplication
其他杂项: - 异步代码活动确实会阻止您的工作流在他们执行异步工作时持续存在。我不认为它们应该被故意用作一种反持久性机制——如果你想要其中之一,请查看NoPersistZone 活动。
- 没有“卸载”活动,但有“坚持”活动。工作流可以说他们想要保存进度,但只有主机才能最终决定何时卸载。