Azure functions 我可以在持久函数中使用foreach循环吗?

Azure functions 我可以在持久函数中使用foreach循环吗?,azure-functions,azure-durable-functions,Azure Functions,Azure Durable Functions,我已经编写了我的第一个持久函数,我想知道在orchestrator函数中使用foreach循环是否可能/良好实践 编排中的第一个活动返回一个项目id列表,我希望通过该列表循环,并使用子编排为每个项目id执行一系列活动 我创建了一个测试函数,它似乎可以工作。我观察到的唯一行为是,每次编排器重放时,当它到达foreach循环时,它会遍历整个列表,直到到达当前项,然后执行活动 如有任何建议/意见,将不胜感激 感谢查看您的示例,这是非常标准的扇出/扇出案例。您可以并行地在活动上运行循环,但要确保是异步运

我已经编写了我的第一个持久函数,我想知道在orchestrator函数中使用foreach循环是否可能/良好实践

编排中的第一个活动返回一个项目id列表,我希望通过该列表循环,并使用子编排为每个项目id执行一系列活动

我创建了一个测试函数,它似乎可以工作。我观察到的唯一行为是,每次编排器重放时,当它到达foreach循环时,它会遍历整个列表,直到到达当前项,然后执行活动

如有任何建议/意见,将不胜感激


感谢查看您的示例,这是非常标准的扇出/扇出案例。您可以并行地在活动上运行循环,但要确保是异步运行的。您可以在这里找到用例和示例

基于评论

这正是Orchestrator应该如何工作的。业务流程正在使用事件源模式。当编排器安排活动时,它进入睡眠状态,当活动完成时,它将被唤醒。每次orchestrator唤醒时,它总是从一开始就重播,并检查执行历史记录,以查看是否已完成给定的活动并继续。因此,在循环的情况下,它将安排所有活动并进入睡眠状态,当醒来时,它将从头开始回放,以查看是否已完成任务。我强烈推荐观看以下来自微软的杰夫·霍兰(Jeff hollan)的视频片段,我相信在这之后你们会有非常清晰的想法


看看您的示例,这是非常标准的扇出/扇出案例。您可以并行地在活动上运行循环,但要确保是异步运行的。您可以在这里找到用例和示例

基于评论

这正是Orchestrator应该如何工作的。业务流程正在使用事件源模式。当编排器安排活动时,它进入睡眠状态,当活动完成时,它将被唤醒。每次orchestrator唤醒时,它总是从一开始就重播,并检查执行历史记录,以查看是否已完成给定的活动并继续。因此,在循环的情况下,它将安排所有活动并进入睡眠状态,当醒来时,它将从头开始回放,以查看是否已完成任务。我强烈推荐观看以下来自微软的杰夫·霍兰(Jeff hollan)的视频片段,我相信在这之后你们会有非常清晰的想法


只要编排中的代码是确定的,就可以了。有关中的代码约束的详细信息


您提到您使用活动函数检索这些ID。只要您使用相同的参数调用函数/子架构,您就可以了,因为在重播过程中,持久函数会识别该函数以前被调用过,并将返回持久化输出(因此不会重新执行相同的函数)。

只要编排中的代码是确定性的,您就可以了。有关中的代码约束的详细信息


您提到您使用活动函数检索这些ID。只要使用相同的参数调用函数/子结构,就应该可以了,因为在重播过程中,持久函数会识别函数之前已被调用,并将返回持久化输出(因此不会重新执行相同的函数).

我知道MapReduce模式,但由于端点的资源和性能因素,我无法将其用于此特定情况。我需要循环遍历一个列表,并执行每次传递一个新id的活动。foreach循环可以工作,orchestrator函数似乎可以处理迭代—我不太喜欢的是它每次都完整地遍历列表以获取下一项的方式。我不知道这是可以接受的还是需要避免的。我已经更新了我的答案。只需浏览以下3-4分钟的视频片段,您就会非常清楚。感谢您提供视频链接。现在我明白了历史表格的工作原理,这一切变得更有意义了。很高兴它起到了作用!我知道MapReduce模式,但由于端点的资源和性能因素,我无法将其用于此特定情况。我需要循环遍历一个列表,并执行每次传递一个新id的活动。foreach循环可以工作,orchestrator函数似乎可以处理迭代—我不太喜欢的是它每次都完整地遍历列表以获取下一项的方式。我不知道这是可以接受的还是需要避免的。我已经更新了我的答案。只需浏览以下3-4分钟的视频片段,您就会非常清楚。感谢您提供视频链接。现在我明白了历史表格的工作原理,这一切变得更有意义了。很高兴它起到了作用!我发布了一个答案,但看到您的实际代码(或简化)会有帮助:)。我发布了一个答案,但看到您的实际代码(或简化)会有帮助:)。我接受这个答案,因为链接文档提到了不确定OrchestrationException。我没有得到这个异常,所以我假设我的编排器都很好,并且确信我的实现是确定的。谢谢,我接受这个答案,因为链接文档提到了不确定性OrchestrationException。我没有得到这个异常,所以我假设我的编排器都很好,并且确信我的实现是确定的。谢谢