2012-09-15 173 views
2

我新的工作流基础和想了解的ActivityActionActivityFunc的目的和之间的区别是从有孩子的活动,而不是有什么不同。WF 4:ActivityAction或ActivityFunc和儿童活动

至于我能理解孩子的活动可能在某些复合NativeActivity存在,必须由它来调度。所以儿童活动可能在执行期间被NativeActivity用作事件处理程序。因此,例如,此NativeActivity可能会运行一些长时间运行的计算,并在其完成时安排它的子进程。

ActivityActionActivityFunc(FUNC返回一个结果和行动没有)存在用于相同的目的 - 使在执行在NativeActivity中定义的过程堵塞自定义处理程序。不同之处在于那些是强类型的,看起来更像是父级声明的合同。

所以我来到了结论,主要区别是强类型和ActivityFunc /动作可能与孩子的活动交换。我的理解错了还是错过了一些东西?

回答

2

ActivityAction和ActivityFunc的主要目的是可以分享自己的活动和孩子的人之间的数据。大多数时间你不需要,你可以安排一个孩子的活动,它可以使用InArguments来获取数据。但是,有些情况下,像ParallelForEach一样,父母不能只填充一个变量,因为每个孩子都是并行调度的。在这种情况下,您希望在安排子活动时传递数据。而这是在ActivityAction进来。

在你不应该需要使用ActivityAction和ActivityFunc虽然大多数情况下。

+0

我发现,我需要这一切的时候,作为传递值和从子活动获得返回结果在我的工作流程很常见的模式。它也非常强大,而将值暴露给子活动的“变量集合”方法是* not *。我总是发现WF4扼流圈带有变量的“可变范围”误差。 – Will

+0

我通常只是在子活动中使用In/OutArguments,并提供一个活动设计器,因此您可以像设计时间一样将其与任何其他活动挂钩。这两种方法都有效,所以我猜这是个人偏好。 – Maurice