
使用 Azure.ResourceManager.DurableTask 管理平面 SDK 在 .NET 中编排 Azure Durable Task Scheduler 资源【免费下载链接】agentic-awesome-skillsAAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,600 agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.项目地址: https://gitcode.com/GitHub_Trending/an/agentic-awesome-skills导读Azure Durable Task Scheduler 是 Azure 提供的托管式持久任务调度服务而Azure.ResourceManager.DurableTask正是面向该服务的Azure Resource ManagerARM管理平面 SDK。本文以 AAS 仓库中该技能文档为主体系统讲解如何用 .NET 代码完成调度器Scheduler、任务中心Task Hub与保留策略Retention Policy的全生命周期管理涵盖安装、认证、SKU 选型、CRUD 操作、扩展方法与错误处理并结合仓库索引佐证其在实际技能目录中的定位。阅读完成后你将能够独立编写一段可运行的生产级管理代码并对管理平面与数据平面的职责边界有清晰认知。管理平面与数据平面的职责边界在使用本 SDK 之前必须先理解 Azure Durable Task Scheduler 生态中两类 SDK 的根本分工SDK平面职责Azure.ResourceManager.DurableTask管理平面Management Plane创建调度器、任务中心配置保留策略与网络 IP 白名单等资源级操作Microsoft.DurableTask.Client.AzureManaged数据平面Data Plane启动编排orchestration、查询实例状态、向实例发送事件Microsoft.DurableTask.Worker.AzureManaged数据平面Worker运行编排与活动activity的执行进程简单来说先用本 SDK 把场地调度器与任务中心搭好再用数据平面 SDK 让演出编排与活动跑起来。两者的安装命令见下文 Related SDKs 一节。在 AAS 技能目录中本技能被归类为cloud类别、风险等级critical并被编入 Azure 生态技能合集见 catalog.json 与 bundles.json说明它属于基础设施级、需谨慎操作的 Azure 资源管理类技能。安装与版本在项目目录下通过dotnetCLI 添加两个包dotnet add package Azure.ResourceManager.DurableTask dotnet add package Azure.Identity其中Azure.Identity用于提供DefaultAzureCredential认证链Azure.ResourceManager.DurableTask本身依赖基础的Azure.ResourceManager包。当前仓库技能文档记录的版本信息如下稳定版v1.0.02025-11-03 发布预览版v1.0.0-beta.12025-04-24 发布API 版本2025-11-01版本信息以技能文档记载为准实际安装时请以 NuGet 上可获取的版本为准并留意 Preview 版本 API 可能发生破坏性变更。环境变量与认证环境变量在运行程序前建议通过环境变量注入订阅与资源组信息避免在代码中硬编码AZURE_SUBSCRIPTION_IDyour-subscription-id AZURE_RESOURCE_GROUPyour-resource-group # 服务主体认证可选本地开发常用 AZURE_TENANT_IDtenant-id AZURE_CLIENT_IDclient-id AZURE_CLIENT_SECRETclient-secret使用 DefaultAzureCredential认证是使用 Azure SDK 的第一步技能文档强调始终使用DefaultAzureCredential绝不硬编码密钥using Azure.Identity; using Azure.ResourceManager; using Azure.ResourceManager.DurableTask; // Always use DefaultAzureCredential var credential new DefaultAzureCredential(); var armClient new ArmClient(credential); // Get subscription var subscriptionId Environment.GetEnvironmentVariable(AZURE_SUBSCRIPTION_ID); var subscription armClient.GetSubscriptionResource( new ResourceIdentifier($/subscriptions/{subscriptionId}));DefaultAzureCredential会自动按顺序尝试多种认证来源本地 Azure CLI 登录、环境变量服务主体、托管标识等因此在本地开发与云端运行时无需修改代码即可无缝切换身份来源。设置AZURE_TENANT_ID、AZURE_CLIENT_ID、AZURE_CLIENT_SECRET环境变量后它即可走服务主体Service Principal路径完成认证。资源层级Resource Hierarchy理解 ARM 资源树有助于记忆扩展方法挂载点与后续 CRUD 调用链ArmClient └── SubscriptionResource └── ResourceGroupResource └── DurableTaskSchedulerResource ├── DurableTaskHubResource └── DurableTaskRetentionPolicyResourceArmClient是所有 ARM 操作的入口调度器隶属于资源组任务中心与保留策略则隶属于调度器这也解释了删除顺序约束必须先删除任务中心才能删除其所属的调度器见 Best Practices。核心工作流调度器与任务中心的完整生命周期以下 8 个步骤覆盖了从创建到清理的完整资源生命周期所有代码均可直接粘贴到 .NET 控制台或 Web 项目中运行。1. 创建 Durable Task SchedulerDedicated SKU调度器是 Durable Task Scheduler 的核心资源创建时通过DurableTaskSchedulerData描述位置、SKU 与网络配置using Azure.ResourceManager.DurableTask; using Azure.ResourceManager.DurableTask.Models; // Get resource group var resourceGroup await subscription .GetResourceGroupAsync(my-resource-group); // Define scheduler with Dedicated SKU var schedulerData new DurableTaskSchedulerData(AzureLocation.EastUS) { Properties new DurableTaskSchedulerProperties { Sku new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Dedicated) { Capacity 1 // Number of instances }, // Optional: IP allowlist for network security IPAllowlist { 10.0.0.0/24, 192.168.1.0/24 } } }; // Create scheduler (long-running operation) var schedulerCollection resourceGroup.Value.GetDurableTaskSchedulers(); var operation await schedulerCollection.CreateOrUpdateAsync( WaitUntil.Completed, my-scheduler, schedulerData); DurableTaskSchedulerResource scheduler operation.Value; Console.WriteLine($Scheduler created: {scheduler.Data.Name}); Console.WriteLine($Endpoint: {scheduler.Data.Properties.Endpoint});要点说明AzureLocation.EastUS指定部署区域可按需替换为其他AzureLocation常量Capacity 1表示 Dedicated SKU 下的实例数量可理解为预留计算容量IPAllowlist是可选的 IP 白名单用于生产环境的网络层安全控制接受 CIDR 格式如10.0.0.0/24创建是长时间运行操作LRO通过WaitUntil.Completed等待完成创建成功后可通过scheduler.Data.Properties.Endpoint拿到调度器端点该端点将用于数据平面 SDK 的连接。2. 创建 Consumption按量付费SKU 调度器Consumption SKU 是 Serverless 形态无需指定容量// Consumption SKU (serverless) var consumptionSchedulerData new DurableTaskSchedulerData(AzureLocation.EastUS) { Properties new DurableTaskSchedulerProperties { Sku new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Consumption) // No capacity needed for consumption } }; var operation await schedulerCollection.CreateOrUpdateAsync( WaitUntil.Completed, my-serverless-scheduler, consumptionSchedulerData);两者的适用场景差异详见 SKU 选项 一节。3. 创建 Task Hub任务中心任务中心是编排实例实际运行的逻辑容器必须隶属于某个调度器// Task hubs are created under a scheduler var taskHubData new DurableTaskHubData { // Properties are optional for basic task hub }; var taskHubCollection scheduler.GetDurableTaskHubs(); var hubOperation await taskHubCollection.CreateOrUpdateAsync( WaitUntil.Completed, my-taskhub, taskHubData); DurableTaskHubResource taskHub hubOperation.Value; Console.WriteLine($Task Hub created: {taskHub.Data.Name});基础场景下DurableTaskHubData的属性可以为空当需要更细粒度配置时再在Properties中补充对应项。4. 列出调度器SDK 同时支持订阅级与资源组级的枚举// List all schedulers in subscription await foreach (var sched in subscription.GetDurableTaskSchedulersAsync()) { Console.WriteLine($Scheduler: {sched.Data.Name}); Console.WriteLine($ Location: {sched.Data.Location}); Console.WriteLine($ SKU: {sched.Data.Properties.Sku?.Name}); Console.WriteLine($ Endpoint: {sched.Data.Properties.Endpoint}); } // List schedulers in resource group var schedulers resourceGroup.Value.GetDurableTaskSchedulers(); await foreach (var sched in schedulers.GetAllAsync()) { Console.WriteLine($Scheduler: {sched.Data.Name}); }订阅级使用异步可枚举IAsyncEnumerable配合await foreach可流式遍历全部资源资源组级则通过集合对象的GetAllAsync()枚举。5. 按名称获取调度器两种方式等价按场景选择// Get existing scheduler var existingScheduler await schedulerCollection.GetAsync(my-scheduler); Console.WriteLine($Found: {existingScheduler.Value.Data.Name}); // Or use extension method var schedulerResource armClient.GetDurableTaskSchedulerResource( DurableTaskSchedulerResource.CreateResourceIdentifier( subscriptionId, my-resource-group, my-scheduler)); var scheduler await schedulerResource.GetAsync();第一种基于集合按名称获取第二种通过CreateResourceIdentifier拼装标准 ARM 资源 ID 后直接从ArmClient定位资源适合在不知道集合上下文例如只知道完整资源 ID时使用。6. 更新调度器扩容 / 修改白名单更新同样使用CreateOrUpdateAsync幂等语义传入新配置即可。典型场景是水平扩容与调整 IP 白名单// Get current scheduler var scheduler await schedulerCollection.GetAsync(my-scheduler); // Update with new configuration var updateData new DurableTaskSchedulerData(scheduler.Value.Data.Location) { Properties new DurableTaskSchedulerProperties { Sku new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Dedicated) { Capacity 2 // Scale up }, IPAllowlist { 10.0.0.0/16 } // Update IP allowlist } }; var updateOperation await schedulerCollection.CreateOrUpdateAsync( WaitUntil.Completed, my-scheduler, updateData);注意更新时DurableTaskSchedulerData的 Location 必须取自现有资源scheduler.Value.Data.Location保持区域一致。7. 删除资源删除顺序有硬性约束——先删任务中心再删调度器// Delete task hub first var taskHub await scheduler.GetDurableTaskHubs().GetAsync(my-taskhub); await taskHub.Value.DeleteAsync(WaitUntil.Completed); // Then delete scheduler await scheduler.DeleteAsync(WaitUntil.Completed);如果调度器下仍有任务中心删除调度器将失败。8. 管理保留策略Retention Policy保留策略用于控制编排历史与状态的保留时长属于调度器下的子资源// Get retention policy collection var retentionPolicies scheduler.GetDurableTaskRetentionPolicies(); // Create or update retention policy var retentionData new DurableTaskRetentionPolicyData { Properties new DurableTaskRetentionPolicyProperties { // Configure retention settings } }; var retentionOperation await retentionPolicies.CreateOrUpdateAsync( WaitUntil.Completed, default, // Policy name retentionData);策略名固定为default在DurableTaskRetentionPolicyProperties中填入具体的保留天数等配置项即可。关键类型速查Key Types Reference下表汇总了本 SDK 中最核心的类型及其用途便于在编写代码时快速定位类型用途ArmClient所有 ARM 操作的统一入口DurableTaskSchedulerResource表示一个 Durable Task Scheduler 资源DurableTaskSchedulerCollection调度器的 CRUD 集合列出、获取、创建/更新DurableTaskSchedulerData调度器的创建/更新负载DurableTaskSchedulerProperties调度器配置SKU、IPAllowlist 等DurableTaskSchedulerSkuSKU 配置Name、Capacity、RedundancyStateDurableTaskSchedulerSkuNameSKU 枚举Dedicated、ConsumptionDurableTaskHubResource表示一个 Task Hub 资源DurableTaskHubCollection任务中心的 CRUD 集合DurableTaskHubData任务中心的创建负载DurableTaskRetentionPolicyResource保留策略资源DurableTaskRetentionPolicyData保留策略配置DurableTaskExtensions挂在ArmClient上的扩展方法SKU 选项SKU描述适用场景Dedicated固定容量、实例数可配置Capacity生产工作负载性能可预期、可规划ConsumptionServerless、自动伸缩无需配置容量开发调试、负载波动大的场景选择依据很直观追求确定性性能与容量规划选 Dedicated追求免运维与按需计费选 Consumption。扩展方法Extension MethodsSDK 通过扩展方法把调度器/任务中心操作挂载到SubscriptionResource、ResourceGroupResource与ArmClient上形成与资源层级一致的调用面// On SubscriptionResource subscription.GetDurableTaskSchedulers(); // List all in subscription subscription.GetDurableTaskSchedulersAsync(); // Async enumerable // On ResourceGroupResource resourceGroup.GetDurableTaskSchedulers(); // Get collection resourceGroup.GetDurableTaskSchedulerAsync(name); // Get by name // On ArmClient armClient.GetDurableTaskSchedulerResource(id); // Get by resource ID armClient.GetDurableTaskHubResource(id); // Get task hub by ID这套扩展方法体系与 资源层级 一一对应订阅与资源组层级提供集合与枚举能力ArmClient层级提供按资源 ID 直接定位能力。错误处理Error HandlingARM API 的错误统一以RequestFailedException来自Azure命名空间抛出可通过StatusHTTP 状态码、ErrorCode与Message进行细粒度捕获using Azure; try { var operation await schedulerCollection.CreateOrUpdateAsync( WaitUntil.Completed, schedulerName, schedulerData); } catch (RequestFailedException ex) when (ex.Status 409) { Console.WriteLine(Scheduler already exists); } catch (RequestFailedException ex) when (ex.Status 404) { Console.WriteLine(Resource group not found); } catch (RequestFailedException ex) { Console.WriteLine($ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}); }典型映射关系409 Conflict资源已存在配合幂等的CreateOrUpdateAsync可先查后建或直接忽略冲突404 Not Found资源组、调度器等父资源不存在常见于订阅 ID 或资源组名配错兜底分支打印完整状态码、错误码与消息便于日志排查。完整示例Complete Example将以上全部环节串起来的端到端示例创建调度器 → 创建任务中心 → 打印端点 → 清理资源。using Azure; using Azure.Identity; using Azure.ResourceManager; using Azure.ResourceManager.DurableTask; using Azure.ResourceManager.DurableTask.Models; using Azure.ResourceManager.Resources; // Setup var credential new DefaultAzureCredential(); var armClient new ArmClient(credential); var subscriptionId Environment.GetEnvironmentVariable(AZURE_SUBSCRIPTION_ID)!; var resourceGroupName Environment.GetEnvironmentVariable(AZURE_RESOURCE_GROUP)!; var subscription armClient.GetSubscriptionResource( new ResourceIdentifier($/subscriptions/{subscriptionId})); var resourceGroup await subscription.GetResourceGroupAsync(resourceGroupName); // Create scheduler var schedulerData new DurableTaskSchedulerData(AzureLocation.EastUS) { Properties new DurableTaskSchedulerProperties { Sku new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Dedicated) { Capacity 1 } } }; var schedulerCollection resourceGroup.Value.GetDurableTaskSchedulers(); var schedulerOp await schedulerCollection.CreateOrUpdateAsync( WaitUntil.Completed, my-scheduler, schedulerData); var scheduler schedulerOp.Value; Console.WriteLine($Scheduler endpoint: {scheduler.Data.Properties.Endpoint}); // Create task hub var taskHubData new DurableTaskHubData(); var taskHubOp await scheduler.GetDurableTaskHubs().CreateOrUpdateAsync( WaitUntil.Completed, my-taskhub, taskHubData); var taskHub taskHubOp.Value; Console.WriteLine($Task Hub: {taskHub.Data.Name}); // Cleanup await taskHub.DeleteAsync(WaitUntil.Completed); await scheduler.DeleteAsync(WaitUntil.Completed);将订阅 ID 与资源组名放入环境变量AZURE_SUBSCRIPTION_ID、AZURE_RESOURCE_GROUP后即可直接运行示例结尾的清理逻辑保证资源不残留避免持续计费。Related SDKs 相关 SDK 一览SDK用途安装命令Azure.ResourceManager.DurableTask管理平面本文主题dotnet add package Azure.ResourceManager.DurableTaskMicrosoft.DurableTask.Client.AzureManaged数据平面编排、活动dotnet add package Microsoft.DurableTask.Client.AzureManagedMicrosoft.DurableTask.Worker.AzureManaged运行编排的 Workerdotnet add package Microsoft.DurableTask.Worker.AzureManagedAzure.Identity认证dotnet add package Azure.IdentityAzure.ResourceManagerARM 基础 SDKdotnet add package Azure.ResourceManager典型组合本管理平面 SDK Microsoft.DurableTask.Client.AzureManaged客户端Microsoft.DurableTask.Worker.AzureManagedWorker即可构成一套完整的建资源—提交编排—执行编排闭环。Best Practices 最佳实践使用WaitUntil.Completed对必须在继续前完成的操作如创建后立刻读取Endpoint等待操作完成使用WaitUntil.Started当需要手动轮询或并行执行多个 LRO 时仅启动操作不阻塞始终使用DefaultAzureCredential绝不硬编码密钥让身份来源随环境自动切换处理RequestFailedException对 ARM API 错误做细粒度捕获409/404/兜底见 错误处理使用CreateOrUpdateAsync该方法是幂等的Idempotent存在则更新、不存在则创建天然适配重试与声明式配置先删任务中心再删调度器调度器下存在任务中心时无法删除生产环境启用 IP 白名单通过IPAllowlist限制可访问来源降低攻击面。适用边界与注意事项适用场景仅当任务明确属于通过 ARM 管理平面在 Azure 上创建/配置/销毁 Durable Task Scheduler 相关资源时使用本技能编排的运行、实例查询与事件发送应使用数据平面 SDK。注意事项本技能只应在任务与上述范围清晰匹配时启用不要泛化套用技能输出不能替代针对具体环境的验证、测试或专家评审——尤其是涉及生产资源创建、扩容与删除的操作务必在真实环境中先行演练当输入条件、权限边界、安全约束或成功标准缺失时应停下来向用户澄清后再执行。【免费下载链接】agentic-awesome-skillsAAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,600 agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.项目地址: https://gitcode.com/GitHub_Trending/an/agentic-awesome-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考