Részvezénylések a Durable Functionsben (Azure Functions)

A tevékenységfüggvények meghívása mellett a vezénylő függvények más vezénylő függvényeket is meghívhatnak. Létrehozhat például egy nagyobb vezénylést kisebb vezénylőfüggvények könyvtárából. Egy vezénylőfüggvény több példányát is futtathatja párhuzamosan.

Egy vezénylő függvény meghívhat egy másik vezénylő függvényt a "call-sub-orchestrator" API használatával. Az automatikus újrapróbálkozásról további információt a Hibakezelés és kompenzáció című cikk tartalmaz.

Az al-vezénylő függvények ugyanúgy viselkednek, mint a hívó szempontjából a tevékenységfüggvények. Visszaadhatnak egy értéket, kivételt vethetnek ki, és a szülő vezénylő függvény is várhatja őket.

Megjegyzés:

Az alvezénylések még nem támogatottak a PowerShellben.

Megjegyzés:

Az Azure Functions Node.js programozási modelljének 4-es verziója általánosan elérhető. Az új v4-modell úgy lett kialakítva, hogy rugalmasabb és intuitívabb felhasználói élményt nyújtson JavaScript- és TypeScript-fejlesztők számára. A migrálási útmutatóban további információt olvashat a v3 és a v4 közötti különbségekről.

A következő kódrészletekben a JavaScript (PM4) a V4 programozási modellt, az új felületet jelöli.

Példa

Az alábbi példa egy olyan IoT-forgatókönyvet mutat be, amelyben több eszközt kell kiépíteni. Az alábbi függvény az egyes eszközökhöz végrehajtandó kiépítési munkafolyamatot jelöli:

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

Ez a vezénylő függvény használható egyszeri eszközkiépítéshez, vagy egy nagyobb vezénylés része lehet. Az utóbbi esetben a szülő vezénylő függvény ütemezheti DeviceProvisioningOrchestration a "call-sub-orchestrator" API használatát.

Íme egy példa, amely bemutatja, hogyan futtathat több vezénylőfüggvényt párhuzamosan.

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

    // ...
}

Megjegyzés:

Az előző C#-példák a Durable Functions 2.x-hez tartoznak. A Durable Functions 1.x esetén a helyett IDurableOrchestrationContexta DurableOrchestrationContext . A verziók közötti különbségekről további információt a Durable Functions verzióiról szóló cikkben talál.

Megjegyzés:

Az alvezényléseket ugyanabban a függvényalkalmazásban kell definiálni, mint a szülő vezénylést. Ha egy másik függvényalkalmazásban kell meghívnia és várnia a vezényléseket, fontolja meg a HTTP API-k beépített támogatását és a HTTP 202 lekérdezési fogyasztói mintát. További információkért tekintse meg a HTTP-szolgáltatások témakört .

További lépések