Azure耐用功能如何恢复?

Mad*_*han 1 c# azure task-parallel-library async-await azure-functions

我正在查看Azure Durable Functions扩展(以及Durable Task框架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
Run Code Online (Sandbox Code Playgroud)

想象一下,在Other Function完成后,在不是第一台的机器上恢复了该功能.如何在不执行第一个框架的情况下从第二个框架恢复框架?

实际上,在这种情况下,是否有可能多次执行HTTP调用?


我查看了Microsoft Bot Framework,它有一个类似的恢复策略,用于序列化和重新水化Dialog堆栈.(这强制编写的代码不涉及外部作用域,因此函数本身可以序列化.etc.)

我对.NET任务(或持久任务)中的核心功能感兴趣,它允许Task在不同的机器上序列化和恢复,而无需重新运行已经执行的部分(可能在不同的机器上).

Mik*_*kov 5

实际上它会HttpClient在CallActivity完成后运行函数时第二次执行调用.

这就是文档说:

除了使用DurableOrchestrationContext API之外,Orchestrator代码绝不能启动任何异步操作.例如,没有Task.Run,​​Task.Delay或HttpClient.SendAsync.

因此,如果需要调用外部HTTP点,则应将此调用包装在activity函数中,然后从orchestrator调用它.活动调用结果保存到表存储,因此下一次调用await将从那里返回结果,将调用短路到活动功能.