訓練
模組
使用 Durable Functions 來建立長時間執行的無伺服器工作流程 - Training
了解如何使用可調整且符合成本效益的 Durable Functions,將長時間執行的工作流程協調為一組活動。
本文說明 .NET 隔離式背景工作角色中的 Durable Functions 概觀。 隔離式背景工作角色可讓您的 Durable Functions 應用程式在不同於 Azure Functions 主機的 .NET 版本上執行。
使用此模型可讓您取得 Azure Functions .NET 隔離式背景工作處理序提供的所有優點。 如需詳細資訊,請參閱隔離式背景工作角色模型的優點。 此外,這個新的 SDK 還包含一些新的功能。
MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input)
需求:將 <PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" />
新增至專案。
藉由新增來源產生器套件,您可以存取兩項新功能:
public static class MyFunctions
{
[Function(nameof(MyActivity))]
public static async Task<string> MyActivity([ActivityTrigger] string input)
{
// implementation
}
[Function(nameof(MyOrchestration))]
public static async Task<string> MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, string input)
{
// implementation
return await context.CallActivityAsync(nameof(MyActivity), input);
}
}
[DurableTask(nameof(MyActivity))]
public class MyActivity : TaskActivity<string, string>
{
private readonly ILogger logger;
public MyActivity(ILogger<MyActivity> logger) // activities have access to DI.
{
this.logger = logger;
}
public async override Task<string> RunAsync(TaskActivityContext context, string input)
{
// implementation
}
}
[DurableTask(nameof(MyOrchestration))]
public class MyOrchestration : TaskOrchestrator<string, string>
{
public async override Task<string> RunAsync(TaskOrchestrationContext context, string input)
{
ILogger logger = context.CreateReplaySafeLogger<MyOrchestration>(); // orchestrations do NOT have access to DI.
// An extension method was generated for directly invoking "MyActivity".
return await context.CallMyActivityAsync(input);
}
}
.NET 隔離式背景工作角色支援持久性實體。 請參閱開發人員指南。
本指南假設您從 .NET Durable Functions 2.x 專案開始。
第一個步驟是將專案更新為 Azure Functions .NET 隔離式。 然後,更新您的 Durable Functions NuGet 套件參考。
舊:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.9.0" />
</ItemGroup>
新增:
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.1.0" />
</ItemGroup>
適用於 .NET 隔離式背景工作角色的 Durable Functions 是具有不同型別和命名空間的全新套件。 因此,您的程式碼會有一些必要變更,但許多 API 可以配合而無需任何變更。
Durable Functions .NET 隔離式背景工作角色和 Durable Functions 2.x 的結構描述保持不變,不需要變更。
此資料表並非完整的變更清單。
2.x | 隔離式方案 |
---|---|
IDurableOrchestrationClient |
DurableTaskClient |
IDurableOrchestrationClient.StartNewAsync |
DurableTaskClient.ScheduleNewOrchestrationInstanceAsync |
IDurableEntityClient.SignalEntityAsync |
DurableTaskClient.Entities.SignalEntityAsync |
IDurableEntityClient.ReadEntityStateAsync |
DurableTaskClient.Entities.GetEntityAsync |
IDurableEntityClient.ListEntitiesAsync |
DurableTaskClient.Entities.GetAllEntitiesAsync |
IDurableEntityClient.CleanEntityStorageAsync |
DurableTaskClient.Entities.CleanEntityStorageAsync |
IDurableOrchestrationContext |
TaskOrchestrationContext |
IDurableOrchestrationContext.GetInput<T>() |
TaskOrchestrationContext.GetInput<T>() 或插入輸入作為參數:MyOrchestration([OrchestrationTrigger] TaskOrchestrationContext context, T input) |
DurableActivityContext |
沒有對等項目 |
DurableActivityContext.GetInput<T>() |
插入輸入作為參數 MyActivity([ActivityTrigger] T input) |
IDurableOrchestrationContext.CallActivityWithRetryAsync |
TaskOrchestrationContext.CallActivityAsync ,包含 TaskOptions 參數與 retry 詳細資料。 |
IDurableOrchestrationContext.CallSubOrchestratorWithRetryAsync |
TaskOrchestrationContext.CallSubOrchestratorAsync ,包含 TaskOptions 參數與 retry 詳細資料。 |
IDurableOrchestrationContext.CallHttpAsync |
TaskOrchestrationContext.CallHttpAsync |
IDurableOrchestrationContext.CreateReplaySafeLogger(ILogger) |
TaskOrchestrationContext.CreateReplaySafeLogger<T>() 或 TaskOrchestrationContext.CreateReplaySafeLogger(string) |
IDurableOrchestrationContext.CallEntityAsync |
TaskOrchestrationContext.Entities.CallEntityAsync |
IDurableOrchestrationContext.SignalEntity |
TaskOrchestrationContext.Entities.SignalEntityAsync |
IDurableOrchestrationContext.LockAsync |
TaskOrchestrationContext.Entities.LockEntitiesAsync |
IDurableOrchestrationContext.IsLocked |
TaskOrchestrationContext.Entities.InCriticalSection |
IDurableEntityContext |
TaskEntityContext . |
IDurableEntityContext.EntityName |
TaskEntityContext.Id.Name |
IDurableEntityContext.EntityKey |
TaskEntityContext.Id.Key |
IDurableEntityContext.OperationName |
TaskEntityOperation.Name |
IDurableEntityContext.FunctionBindingContext |
已移除,新增 FunctionContext 作為輸入參數 |
IDurableEntityContext.HasState |
TaskEntityOperation.State.HasState |
IDurableEntityContext.BatchSize |
已移除 |
IDurableEntityContext.BatchPosition |
已移除 |
IDurableEntityContext.GetState |
TaskEntityOperation.State.GetState |
IDurableEntityContext.SetState |
TaskEntityOperation.State.SetState |
IDurableEntityContext.DeleteState |
TaskEntityOperation.State.SetState(null) |
IDurableEntityContext.GetInput |
TaskEntityOperation.GetInput |
IDurableEntityContext.Return |
移除。 改用方法傳回值。 |
IDurableEntityContext.SignalEntity |
TaskEntityContext.SignalEntity |
IDurableEntityContext.StartNewOrchestration |
TaskEntityContext.ScheduleNewOrchestration |
IDurableEntityContext.DispatchAsync |
TaskEntityDispatcher.DispatchAsync . 已移除建構函式參數。 |
IDurableOrchestrationClient.GetStatusAsync |
DurableTaskClient.GetInstanceAsync |
Newtonsoft.Json
變更為 System.Text.Json
。 如需詳細資訊,請參閱此處。訓練
模組
使用 Durable Functions 來建立長時間執行的無伺服器工作流程 - Training
了解如何使用可調整且符合成本效益的 Durable Functions,將長時間執行的工作流程協調為一組活動。
文件
.NET 中持久性實體的開發人員指南 - Azure Functions
如何使用 .NET 中的持久性實體搭配 Azure Functions 的 Durable Functions 延伸模組。
如何針對 Azure Functions 的 Durable Functions 擴充功能使用觸發程序和繫結。
快速入門:建立 C# Durable Functions 應用程式
使用 Visual Studio 或 Visual Studio Code 在 Azure Functions 中建立及發佈 C# Durable Functions 應用程式。
Durable Functions 版本概觀 - Azure Functions
了解 Durable Functions 版本。