![](/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.