【问题标题】:How to handle failures in parallel activities如何处理并行活动中的故障
【发布时间】:2013-05-03 12:49:29
【问题描述】:

我在 Windows Workflow Foundation 中有一个工作流。我创建了一个 Parallel 组,我在其中放置了四个扩展 NativeActivity 的活动。

活动正在调用远程 Web 服务,如果调用中出现任何问题(可能是业务规则),我会通过在 NativeActivityContext 上创建 Bookmark 来暂停活动>。这不是很好,如果不止一个活动失败,因为它们使用相同的书签名称 (SuspendBookmark)。

是否有可能以某种方式扩展并行行为,并可能在这里处理失败而不是并行调用中的每个活动?

另一件事,如果一个活动成功而另一个失败,如果我从失败活动中的挂起书签恢复会发生什么?它会再次运行并行调用中的每个活动,还是我只是重新运行失败的活动?

我需要一些关于如何在我的工作流程中实现这些并行调用以及如何处理其中的故障的信息。

【问题讨论】:

    标签: c# .net workflow-foundation-4


    【解决方案1】:

    如果我理解你的话,如果并行活动的任何分支出错,你想取消并行活动。这样只会创建一个书签,您可以恢复它。

    您已在Parallel 活动中使用CompletionCondition 属性。

    如果此属性的计算结果为 true,则其他计划元素 在 Branches 集合中被取消。如果未设置此属性, Branches 集合中的所有 Activity 对象执行到 完成。

    只需在并行活动级别创建一个bool 变量,并在出现问题时将其设置为true

    如果这不能按您想要的方式工作,那么没有什么能阻止您创建自己的自定义并行活动。

    PS:请记住,并行活动并不是真正的并行。它并行等待所有分支执行,但执行本身是顺序的(尽管与顺序无关)。

    【讨论】:

      【解决方案2】:

      如果您将活动视为两种不同类型(类),也许会有所帮助。一种是单一的、独立的活动,它可以失败也可以成功,并且有自己的书签。第二种活动是“复合”活动。这是一个活动的集合,这些活动也可能失败或成功,并且可能还有自己的书签。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-09
        • 2012-11-04
        相关资源
        最近更新 更多