加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

.net – Windows工作流 – PersistableIdle

发布时间:2020-12-14 01:52:31 所属栏目:Windows 来源:网络整理
导读:在我们公司,我们有一个业务流程需要: 从X获取数据 等待用户Y进行研究 根据第2步数据从Z获取数据 在研究这个问题时,似乎有一些选项可以在工作流程中实现这一点. 在步骤1(工作流程活动)和步骤3(工作流程活动)之间添加延迟活动.然后在PersistableIdle事件期间,
在我们公司,我们有一个业务流程需要:

>从X获取数据
>等待用户Y进行研究
>根据第2步数据从Z获取数据

在研究这个问题时,似乎有一些选项可以在工作流程中实现这一点.

>在步骤1(工作流程活动)和步骤3(工作流程活动)之间添加延迟活动.然后在PersistableIdle事件期间,卸载worklow.当用户完成步骤2时,从数据库重新加载工作流程.
>与#1相同,但使用书签而不是延迟活动.

是否有更好的approch(1,2或另一种选择)?

我们所有的其他活动都是AsyncCodeActivities,所以我很确定它们不会触发PersistableIdle事件(因为它们处于无持久区域),但我想确保在其他情况下不会意外卸载工作流.这里有风险吗?反正有没有创建一个强制工作流卸载的活动?

解决方法

Is there a better approach (1,2 or another option)?

乍一看,#2听起来很有必要.使用书签(或某种书签活动,如接收)的原因是它们可以随时恢复.这允许用户Y的研究结束,并且工作流程可以随时恢复执行(而不是在延迟到期之前被阻止).

#1可能也是必要的反驳是,您可能希望设置触发工作流操作的时间限制(提醒被触发,例外,取消等).

怎么决定?我认为答案通常是#3:两者

使用Pick Activity是一种很好的方法.在一个PickBranch触发器中使用书签活动,在另一个PickBranch触发器中使用延迟活动,您可以编写一个工作流程,该工作流程将“处理先发生者 – 用户Y或超时”.

您提出的第二个问题是“当我不希望工作流程被卸载时,如何停止卸载工作流程?”是否意外的工作流程正在卸载风险?

嗯,这取决于.如果您正在使用WorkflowServiceHost,那么卸载工作流并不会带来很大的风险,因为WorfklowServiceHost足够智能,可以在需要做更多工作(处理传入消息或从延迟恢复)时重新加载工作流.

如果您没有使用WorkflowServiceHost,您可能正在编写主机,您可以通过某些工作获得相同的效果,或者您可以阻止卸载发生 – 当您编写主机时,您可以通过事件控制卸载策略在WorkflowApplication上

其他杂项:
– 异步代码活动确实可以防止您的工作流在进行异步工作时保持不变.我不认为它们应该被故意用作反持久机制 – 如果你想要其中一个,请查看NoPersistZone activity.

– 没有’卸载’活动,但有一个’持久’活动.工作流可以说他们想要保存进度,但只有主机才能在卸载发生时做出最终决定.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读