Översikt över Durable Functions i .NET isolated worker

Med den isolerade .NET-arbetaren kan du köra Durable Functions på valfri .NET-version som stöds oberoende av Azure Functions-värdprocessen. Den här modellen ger dig fullständig kontroll över beroendeinmatning, mellanprogram och .NET-versionshantering.

I den här artikeln lär du dig mer om:

Benefits

Den isolerade .NET-arbetaren har flera fördelar för Durable Functions-appar:

  • Oberoende .NET-versionshantering: Kör appen på .NET 8, .NET 9 eller senare utan att vänta på att Functions-värden ska uppdateras.
  • Fullständig beroendeinmatning: Använd standardmönster för .NET IServiceCollection / IServiceProvider i dina aktiviteter.
  • Anpassat mellanprogram: Lägg till övergripande problem som loggning, autentisering eller felhantering via Functions Worker-pipelinen för mellanprogram.
  • Direktinmatning: Orkestreringsindata kan matas in direkt i utlösarmetodens signatur: MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input).
  • Starkt skrivna anrop (förhandsversion): Med källgeneratorpaketet får du kompileringstidssäkra anrop för aktiviteter och underorkestreringar. Mer information finns i Källgeneratorer och klassbaserad syntax (förhandsversion).

Den fullständiga listan över isolerade arbetsförmåner finns i Fördelar med den isolerade arbetsmodellen.

Get started

Så här skapar du en Durable Functions-app med hjälp av den isolerade .NET-arbetaren:

  1. Installera det nödvändiga NuGet-paketet:

    <PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.*" />
    
  2. Används TaskOrchestrationContext för orkestrerare och DurableTaskClient för klientåtgärder. En fullständig genomgång finns i snabbstartsguiden .

Viktiga skillnader från i-processen

Här är de viktigaste skillnaderna om du migrerar från eller jämför med den processbaserade modellen:

Område Pågående .NET isolerad arbetare
NuGet-paket Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.Azure.Functions.Worker.Extensions.DurableTask
Orchestrator-kontext IDurableOrchestrationContext TaskOrchestrationContext
Klienttyp IDurableOrchestrationClient DurableTaskClient
Aktivitetskontext IDurableActivityContext TaskActivityContext
Namespace Microsoft.Azure.WebJobs.Extensions.DurableTask Microsoft.DurableTask / Microsoft.Azure.Functions.Worker
Replay-safe logger context.CreateReplaySafeLogger(log) context.CreateReplaySafeLogger("Name")

En omfattande migreringsguide som omfattar projektkonfiguration, paketreferenser, API-mappningar, beteendeskillnader och vanliga problem finns i Migrera från processbaserad till isolerad arbetsmodell.

Källgeneratorer och klassbaserad syntax (förhandsversion)

Källgeneratorpaketet är ett alternativ till funktionsbaserade Durable Functions. I stället för statiska metoder med [Function]-attribut skriver du starkt typade klasser som ärver från SDK:n Durable.

Förutsättningar

Lägg till NuGet-paketet för källgeneratorn i projektet:

<PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0" />

Paketet innehåller två funktioner:

  • Klassbaserade aktiviteter och orkestreringar – starkt skrivna klasser som ärver TaskOrchestrator<TInput, TOutput> och TaskActivity<TInput, TOutput>.
  • Strikt typade tilläggsmetoder – kompileringstidssäkra metoder för att anropa underorkestreringar och aktiviteter. Dessa tilläggsmetoder fungerar också i funktionsbaserade orkestreringar.

Example

I följande exempel visas en klassbaserad orkestrering som anropar en klassbaserad aktivitet:

using Microsoft.DurableTask;

[DurableTask]
public class MyOrchestration : TaskOrchestrator<string, string>
{
    public override async Task<string> RunAsync(TaskOrchestrationContext context, string input)
    {
        return await context.CallActivityAsync<string>(nameof(MyActivity), input);
    }
}

[DurableTask]
public class MyActivity : TaskActivity<string, string>
{
    public override Task<string> RunAsync(TaskActivityContext context, string input)
    {
        return Task.FromResult($"Processed: {input}");
    }
}

Tip

För orkestreringar eller aktiviteter som inte behöver funktionella indata eller utdata använder object? du som allmänt typargument (till exempel TaskOrchestrator<object?, object?>). Med det här mönstret kan du använda beroendeinmatning (till exempel ILogger<T>) i aktiviteter medan du fortfarande använder den klassbaserade modellen.

Varaktiga entiteter

Varaktiga entiteter stöds i den isolerade .NET-arbetaren. Mer information finns i utvecklarguiden.

Nästa steg