簡體   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