繁体   English   中英

Azure耐用功能如何恢复?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM