分享方式:


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

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

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

從呼叫端的觀點來看,子協調器函式的行為就像活動函式一樣。 子協調器函式可以傳回值、擲回例外狀況,還可以由父代協調器函式來等候。

注意

PowerShell 尚不支援子協調流程。

注意

適用於 Azure Functions 的第 4 版 Node.js 程式設計模型已正式推出。 新的 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: ...
}

這個協調器函式可直接用於一次性裝置佈建,也可以當作更大協調流程的一部分。 在後者的情況下,父協調器函式可使用 "call-sub-orchestrator" API 來排程 DeviceProvisioningOrchestration 的執行個體。

以下示範如何平行執行多個協調器函式。

[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 功能如需詳細資訊,請參閱 HTTP 功能主題。

下一步