我有一个与持久性函数序列示例非常吻合的用例:通过三个函数推送json有效负载,每个函数修改json图并将其转发到下一个函数。
在序列示例中,通过向协调器发出查询来检索序列的结果。
在我的用例中,我想直接返回三个函数的结果,主要是作为第三个函数的响应。
有办法做到这一点吗?这是明智的吗?
答案 0 :(得分:2)
这当然可行。您可以从HTTP触发器开始,以启动业务流程,并使用函数内的GetStatusAsync API进行轮询并等待它完成。完成后,您可以从HTTP触发器返回结果。
这样的事情,也许是:
public static async Task<JObject> Run(JObject input, DurableOrchestrationClient client)
{
string instanceId = await client.StartAsync("MyOrchestration", input);
for (int i = 0; i < 60; i++)
{
var status = await client.GetStatusAsync(instanceId);
if (status?.RuntimeStatus == "Completed")
{
return (JObject)status.Output;
}
// handle other status conditions, like failure
await Task.Delay(TimeSpan.FromSeconds(1));
}
// handle timeouts
}
从代码中可以看出,您遇到的问题是处理错误情况。例如,如果业务流程失败,您的功能会怎样做?那么,如果需要很长时间才能完成呢?这些是你当然可以弄明白的东西,但是你想要采取防御措施来处理这些案件。