Subindelingen in Durable Functions (Azure Functions)

Naast het aanroepen van activiteitsfuncties kunnen orchestratorfuncties andere orchestratorfuncties aanroepen. U kunt bijvoorbeeld een grotere indeling maken uit een bibliotheek met kleinere orchestratorfuncties. U kunt ook meerdere exemplaren van een orchestratorfunctie parallel uitvoeren.

Een orchestratorfunctie kan een andere orchestratorfunctie aanroepen met behulp van de API call-sub-orchestrator . Het artikel Foutafhandeling en compensatie bevat meer informatie over automatische nieuwe pogingen.

Suborchestratorfuncties gedragen zich net als activiteitsfuncties vanuit het perspectief van de beller. Ze kunnen een waarde retourneren, een uitzondering genereren en kunnen worden gewacht door de bovenliggende orchestratorfunctie.

Notitie

Subindelingen worden nog niet ondersteund in PowerShell.

Notitie

Versie 4 van het Node.js-programmeermodel voor Azure Functions is algemeen beschikbaar. Het nieuwe v4-model is ontworpen voor een flexibelere en intuïtievere ervaring voor JavaScript- en TypeScript-ontwikkelaars. Meer informatie over de verschillen tussen v3 en v4 in de migratiehandleiding.

In de volgende codefragmenten geeft JavaScript (PM4) het programmeermodel V4 aan, de nieuwe ervaring.

Opmerking

In het volgende voorbeeld ziet u een IoT-scenario ('Internet of Things') waarin meerdere apparaten moeten worden ingericht. De volgende functie vertegenwoordigt de inrichtingswerkstroom die voor elk apparaat moet worden uitgevoerd:

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: ...
}

Deze orchestratorfunctie kan als zodanig worden gebruikt voor eenmalige inrichting van apparaten of kan deel uitmaken van een grotere indeling. In het laatste geval kan de bovenliggende orchestratorfunctie exemplaren plannen van het gebruik van DeviceProvisioningOrchestration de API call-sub-orchestrator .

Hier volgt een voorbeeld waarin wordt getoond hoe u meerdere orchestratorfuncties parallel kunt uitvoeren.

[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);

    // ...
}

Notitie

De vorige C#-voorbeelden zijn voor Durable Functions 2.x. Voor Durable Functions 1.x moet u in DurableOrchestrationContext plaats van IDurableOrchestrationContext. Zie het artikel Over Durable Functions-versies voor meer informatie over de verschillen tussen versies.

Notitie

Subindelingen moeten worden gedefinieerd in dezelfde functie-app als de bovenliggende indeling. Als u indelingen in een andere functie-app wilt aanroepen en wachten, kunt u overwegen om de ingebouwde ondersteuning voor HTTP-API's en het HTTP 202-pollingconsumerpatroon te gebruiken. Zie het onderwerp HTTP-functies voor meer informatie.

Volgende stappen