如何处理并行活动中的失败

时间:2013-05-03 12:49:29

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

  

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

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

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

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

答案 1 :(得分:0)

如果您认为活动属于两种不同的类(类),它可能会有所帮助。一个是单一的,独立的活动,可以失败或成功并拥有自己的书签。第二类活动是“复合”活动。这是一系列活动,也可能失败或成功,也可能有自己的书签。