共用方式為


Durable Functions (Azure Functions) 中的子協調流程

除了呼叫活動函式之外,協調器函式還可以呼叫其他協調器函式。 例如,您可以從更小的協調器函式程式庫中編譯更大的協調流程。 或者,您可以平行執行協調器函式的多個實例。

協調器函式可以使用 「call-sub-orchestrator」 API 呼叫另一個協調器函式。 錯誤處理與補償一文提供自動重試的詳細資訊。

子協調器函式的行為就像從呼叫端的觀點來看的活動函式一樣。 它們可以傳回值,並擲回例外狀況,因為父協調器函式預期會出現這些情況。

備註

在 PowerShell 中,只有獨立 SDK 支援子協調流程: AzureFunctions.PowerShell.Durable.SDK。 請參閱獨立 SDK 與舊版內建 SDK 之間的差異,以及 移轉指南

備註

Azure Functions Node.js 程式設計模型的第 4 版已正式推出。 v4 模型旨在為 JavaScript 與 TypeScript 開發者提供更靈活且直覺的使用體驗。 關於 v3 與 v4 差異的更多資訊,請參閱 遷移指南

在以下程式碼片段中,JavaScript(PM4)代表程式設計模型 v4,即新體驗。

範例

下列範例說明需要布建多個裝置的IoT (「物聯網」) 案例。 下列函式代表必須針對每個裝置執行的布建工作流程:

public static async Task DeviceProvisioningOrchestration(
    [OrchestrationTrigger] IDurableOrchestrationContext context)
{
    string deviceId = context.GetInput<string>();

    // Step 1: Create an installation package in blob storage and return a SAS URL.
    Uri sasUrl = await context.CallActivityAsync<Uri>("CreateInstallationPackage", deviceId);

    // Step 2: Notify the device that the installation package is ready.
    await context.CallActivityAsync("SendPackageUrlToDevice", Tuple.Create(deviceId, sasUrl));

    // Step 3: Wait for the device to acknowledge that it has downloaded the new package.
    await context.WaitForExternalEvent<bool>("DownloadCompletedAck");

    // Step 4: ...
}

此協調器函式可用於一次性裝置布建 as-is,也可以是較大協調流程的一部分。 在後者的情況下,父協調器可以使用 DeviceProvisioningOrchestration API 來排程實例。

下列範例示範如何同時執行多個協調器函式:

[FunctionName("ProvisionNewDevices")]
public static async Task ProvisionNewDevices(
    [OrchestrationTrigger] IDurableOrchestrationContext context)
{
    string[] deviceIds = await context.CallActivityAsync<string[]>("GetNewDeviceIds");

    // Run multiple device provisioning flows in parallel
    var provisioningTasks = new List<Task>();
    foreach (string deviceId in deviceIds)
    {
        Task provisionTask = context.CallSubOrchestratorAsync("DeviceProvisioningOrchestration", deviceId);
        provisioningTasks.Add(provisionTask);
    }

    await Task.WhenAll(provisioningTasks);

    // ...
}

備註

先前的 C# 範例適用於 Durable Functions 2.x。 針對 Durable Functions 1.x,您必須使用 DurableOrchestrationContext 而非 IDurableOrchestrationContext。 如需版本間差異的詳細資訊,請參閱 Durable Functions 版本 一文。

備註

子協調流程必須在與父協調流程相同的函式應用程式中定義。 如果您需要呼叫並等候另一個函數應用程式中的協調流程,請考慮使用 HTTP API 和 HTTP 202 輪詢取用者模式的內建支援。 如需詳細資訊,請參閱 HTTP 功能 主題。

後續步驟