![](/img/trans.png)
[英]How to terminate a Durable orchestration with custom status in Azure Durable Functions
[英]How do Azure Durable Functions resume?
我正在查看Azure耐用功能扩展 (和耐用任务框架repo ),并寻找如何处理以下情况的技术细节。
想象以下编排。
var result1 = await client.PostAsync("http://some-external-service.com/...", input);
var result2 = await context.CallActivityAsync<string>("Other Function","some data");
... do more stuff with result1 and result2
想象一下,在“ Other Function
完成之后,该功能是在不是第一台计算机上恢复的。 框架如何从第二个等待中恢复,而不执行第一个?
实际上,在这种情况下,是否可以多次执行HTTP调用?
我看了一下Microsoft Bot Framework,它具有类似的恢复策略,可以对Dialog
堆栈进行序列化和重新水化。 (此强制编写的代码未引用外部作用域,因此该函数本身可以序列化等等。)
我对.NET Tasks(或Durable Tasks)中的核心功能感兴趣,该功能允许在另一台计算机上序列化和恢复Task
,而无需重新运行已执行的部分(可能在另一台计算机上)。
实际上,在CallActivity
完成后,在运行该函数时, CallActivity
第二次执行HttpClient
调用。
这就是为什么文档说 :
除非使用DurableOrchestrationContext API,否则Orchestrator代码不得启动任何异步操作。 例如,没有Task.Run,Task.Delay或HttpClient.SendAsync。
因此,如果需要调用外部HTTP点,则应将此调用包装在活动函数中,然后从Orchestrator进行调用。 活动调用结果将保存到表存储中,因此下一个对await
调用将从那里返回结果,从而使对活动函数的调用短路。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.