0

我有一个调用几个活动的子编排。其中一个活动被调用约 150 次,每个活动都放在一个任务列表中,然后等待 Task.WhenAll(list)。这些任务中的每一个都返回一个 base64 编码的图像,因此消息在较大的一侧。

编排聚合来自这些活动的结果并将它们返回给父编排。使用调试器单步执行时,编排正确完成并返回适当的结果。

在收到子编排的结果后,我在下一步的父编排中有一个断点,但它永远不会被击中。结果永远不会返回给父级。

这可能与从子编排返回的消息大小有关吗?

如果我在父编排中内联子编排代码而不是将其作为子编排调用它可以正常工作

4

1 回答 1

0

这似乎是持久函数框架中的一个错误。我在使用 Javascript 编排器时遇到了同样的问题,该编排器会在 subOrchestration 完成后立即退出,并且在 subOrchestration 之后不执行代码。该问题似乎源于一个错误,即如果 subOrchestration 没有定义的 instanceId,则持久函数框架无法从已保存状态检索 subOrchestration 的输出。因此,通过指定 instanceId,代码将正常执行。

我失败的编排器代码如下所示:

var reboot_result = yield context.df.callSubOrchestrator('reboot_orchestrator',reboot_input);
context.log('this is the next line after subOrch call which will not get called');

context.log 永远不会被调用。所以我在 callSubOrchestrator 上手动指定了一个 instanceId,这解决了这个问题:)

const child_id = context.df.instanceId + ":0"; //create instanceId
var reboot_result = yield context.df.callSubOrchestrator('reboot_orchestrator',reboot_input,child_id);
context.log('this is the next line after subOrch call and now it gets called properly');

这是 Github 错误报告的链接:https ://github.com/Azure/azure-functions-durable-js/issues/54

于 2019-08-16T22:28:25.917 回答