[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71RKFCFF2XBYTTY1XDK5GX9":3,"skill-same:01M71RKFCFF2XBYTTY1XDK5GX9":47},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":14,"categories":15,"keywords":16,"publishedAt":22,"linkOnly":23,"markdownContent":24,"markdownBody":25,"frontMatter":26,"refName":27,"commitSha":28,"skillDirectory":29,"forksCount":12,"repositoryHtmlUrl":30,"repositoryHomepageUrl":6,"ownerHtmlUrl":31,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":32,"install":33,"resources":46},"01M71RKFCFF2XBYTTY1XDK5GX9","azure-resource-manager-durabletask-dotnet",null,"javiertarazon\u002Fide-agente-free-jt7-","javiertarazon","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F153141207?v=4","01M71R52TB3S9HXKH6WSNT8A7V","01M71R52VG5KS2DKDDH4GDQ30A",0,"MIT","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fazure-resource-manager-durabletask-dotnet\u002FSKILL.md",[],[17,18,19,20,21],"dotnet","azure","azure resource manager durabletask dotnet","azure resource manager","manager","2026-11-10 13:02:02",false,"---\nname: azure-resource-manager-durabletask-dotnet\ndescription: \"|\"\n  Azure Resource Manager SDK for Durable Task Scheduler in .NET. Use for MANAGEMENT PLANE operations: creating\u002Fmanaging Durable Task Schedulers, Task Hubs, and retention policies via Azure Resource Manager. Triggers: \"Durable Task Scheduler\", \"create scheduler\", \"task hub\", \"DurableTaskSchedulerResource\", \"provision Durable Task\", \"orchestration scheduler\".\npackage: Azure.ResourceManager.DurableTask\nrisk: unknown\nsource: community\n---\n\n# Azure.ResourceManager.DurableTask (.NET)\n\nManagement plane SDK for provisioning and managing Azure Durable Task Scheduler resources via Azure Resource Manager.\n\n> **⚠️ Management vs Data Plane**\n> - **This SDK (Azure.ResourceManager.DurableTask)**: Create schedulers, task hubs, configure retention policies\n> - **Data Plane SDK (Microsoft.DurableTask.Client.AzureManaged)**: Start orchestrations, query instances, send events\n\n## Installation\n\n```bash\ndotnet add package Azure.ResourceManager.DurableTask\ndotnet add package Azure.Identity\n```\n\n**Current Versions**: Stable v1.0.0 (2025-11-03), Preview v1.0.0-beta.1 (2025-04-24)\n**API Version**: 2025-11-01\n\n## Environment Variables\n\n```bash\nAZURE_SUBSCRIPTION_ID=\u003Cyour-subscription-id>\nAZURE_RESOURCE_GROUP=\u003Cyour-resource-group>\n# For service principal auth (optional)\nAZURE_TENANT_ID=\u003Ctenant-id>\nAZURE_CLIENT_ID=\u003Cclient-id>\nAZURE_CLIENT_SECRET=\u003Cclient-secret>\n```\n\n## Authentication\n\n```csharp\nusing Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.DurableTask;\n\n\u002F\u002F Always use DefaultAzureCredential\nvar credential = new DefaultAzureCredential();\nvar armClient = new ArmClient(credential);\n\n\u002F\u002F Get subscription\nvar subscriptionId = Environment.GetEnvironmentVariable(\"AZURE_SUBSCRIPTION_ID\");\nvar subscription = armClient.GetSubscriptionResource(\n    new ResourceIdentifier($\"\u002Fsubscriptions\u002F{subscriptionId}\"));\n```\n\n## Resource Hierarchy\n\n```\nArmClient\n└── SubscriptionResource\n    └── ResourceGroupResource\n        └── DurableTaskSchedulerResource\n            ├── DurableTaskHubResource\n            └── DurableTaskRetentionPolicyResource\n```\n\n## Core Workflow\n\n### 1. Create Durable Task Scheduler\n\n```csharp\nusing Azure.ResourceManager.DurableTask;\nusing Azure.ResourceManager.DurableTask.Models;\n\n\u002F\u002F Get resource group\nvar resourceGroup = await subscription\n    .GetResourceGroupAsync(\"my-resource-group\");\n\n\u002F\u002F Define scheduler with Dedicated SKU\nvar schedulerData = new DurableTaskSchedulerData(AzureLocation.EastUS)\n{\n    Properties = new DurableTaskSchedulerProperties\n    {\n        Sku = new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Dedicated)\n        {\n            Capacity = 1  \u002F\u002F Number of instances\n        },\n        \u002F\u002F Optional: IP allowlist for network security\n        IPAllowlist = { \"10.0.0.0\u002F24\", \"192.168.1.0\u002F24\" }\n    }\n};\n\n\u002F\u002F Create scheduler (long-running operation)\nvar schedulerCollection = resourceGroup.Value.GetDurableTaskSchedulers();\nvar operation = await schedulerCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-scheduler\",\n    schedulerData);\n\nDurableTaskSchedulerResource scheduler = operation.Value;\nConsole.WriteLine($\"Scheduler created: {scheduler.Data.Name}\");\nConsole.WriteLine($\"Endpoint: {scheduler.Data.Properties.Endpoint}\");\n```\n\n### 2. Create Scheduler with Consumption SKU\n\n```csharp\n\u002F\u002F Consumption SKU (serverless)\nvar consumptionSchedulerData = new DurableTaskSchedulerData(AzureLocation.EastUS)\n{\n    Properties = new DurableTaskSchedulerProperties\n    {\n        Sku = new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Consumption)\n        \u002F\u002F No capacity needed for consumption\n    }\n};\n\nvar operation = await schedulerCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-serverless-scheduler\",\n    consumptionSchedulerData);\n```\n\n### 3. Create Task Hub\n\n```csharp\n\u002F\u002F Task hubs are created under a scheduler\nvar taskHubData = new DurableTaskHubData\n{\n    \u002F\u002F Properties are optional for basic task hub\n};\n\nvar taskHubCollection = scheduler.GetDurableTaskHubs();\nvar hubOperation = await taskHubCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-taskhub\",\n    taskHubData);\n\nDurableTaskHubResource taskHub = hubOperation.Value;\nConsole.WriteLine($\"Task Hub created: {taskHub.Data.Name}\");\n```\n\n### 4. List Schedulers\n\n```csharp\n\u002F\u002F List all schedulers in subscription\nawait foreach (var sched in subscription.GetDurableTaskSchedulersAsync())\n{\n    Console.WriteLine($\"Scheduler: {sched.Data.Name}\");\n    Console.WriteLine($\"  Location: {sched.Data.Location}\");\n    Console.WriteLine($\"  SKU: {sched.Data.Properties.Sku?.Name}\");\n    Console.WriteLine($\"  Endpoint: {sched.Data.Properties.Endpoint}\");\n}\n\n\u002F\u002F List schedulers in resource group\nvar schedulers = resourceGroup.Value.GetDurableTaskSchedulers();\nawait foreach (var sched in schedulers.GetAllAsync())\n{\n    Console.WriteLine($\"Scheduler: {sched.Data.Name}\");\n}\n```\n\n### 5. Get Scheduler by Name\n\n```csharp\n\u002F\u002F Get existing scheduler\nvar existingScheduler = await schedulerCollection.GetAsync(\"my-scheduler\");\nConsole.WriteLine($\"Found: {existingScheduler.Value.Data.Name}\");\n\n\u002F\u002F Or use extension method\nvar schedulerResource = armClient.GetDurableTaskSchedulerResource(\n    DurableTaskSchedulerResource.CreateResourceIdentifier(\n        subscriptionId,\n        \"my-resource-group\",\n        \"my-scheduler\"));\nvar scheduler = await schedulerResource.GetAsync();\n```\n\n### 6. Update Scheduler\n\n```csharp\n\u002F\u002F Get current scheduler\nvar scheduler = await schedulerCollection.GetAsync(\"my-scheduler\");\n\n\u002F\u002F Update with new configuration\nvar updateData = new DurableTaskSchedulerData(scheduler.Value.Data.Location)\n{\n    Properties = new DurableTaskSchedulerProperties\n    {\n        Sku = new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Dedicated)\n        {\n            Capacity = 2  \u002F\u002F Scale up\n        },\n        IPAllowlist = { \"10.0.0.0\u002F16\" }  \u002F\u002F Update IP allowlist\n    }\n};\n\nvar updateOperation = await schedulerCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-scheduler\",\n    updateData);\n```\n\n### 7. Delete Resources\n\n```csharp\n\u002F\u002F Delete task hub first\nvar taskHub = await scheduler.GetDurableTaskHubs().GetAsync(\"my-taskhub\");\nawait taskHub.Value.DeleteAsync(WaitUntil.Completed);\n\n\u002F\u002F Then delete scheduler\nawait scheduler.DeleteAsync(WaitUntil.Completed);\n```\n\n### 8. Manage Retention Policies\n\n```csharp\n\u002F\u002F Get retention policy collection\nvar retentionPolicies = scheduler.GetDurableTaskRetentionPolicies();\n\n\u002F\u002F Create or update retention policy\nvar retentionData = new DurableTaskRetentionPolicyData\n{\n    Properties = new DurableTaskRetentionPolicyProperties\n    {\n        \u002F\u002F Configure retention settings\n    }\n};\n\nvar retentionOperation = await retentionPolicies.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"default\",  \u002F\u002F Policy name\n    retentionData);\n```\n\n## Key Types Reference\n\n| Type | Purpose |\n|------|---------|\n| `ArmClient` | Entry point for all ARM operations |\n| `DurableTaskSchedulerResource` | Represents a Durable Task Scheduler |\n| `DurableTaskSchedulerCollection` | Collection for scheduler CRUD |\n| `DurableTaskSchedulerData` | Scheduler creation\u002Fupdate payload |\n| `DurableTaskSchedulerProperties` | Scheduler configuration (SKU, IPAllowlist) |\n| `DurableTaskSchedulerSku` | SKU configuration (Name, Capacity, RedundancyState) |\n| `DurableTaskSchedulerSkuName` | SKU options: `Dedicated`, `Consumption` |\n| `DurableTaskHubResource` | Represents a Task Hub |\n| `DurableTaskHubCollection` | Collection for task hub CRUD |\n| `DurableTaskHubData` | Task hub creation payload |\n| `DurableTaskRetentionPolicyResource` | Retention policy management |\n| `DurableTaskRetentionPolicyData` | Retention policy configuration |\n| `DurableTaskExtensions` | Extension methods for ARM client |\n\n## SKU Options\n\n| SKU | Description | Use Case |\n|-----|-------------|----------|\n| `Dedicated` | Fixed capacity with configurable instances | Production workloads, predictable performance |\n| `Consumption` | Serverless, auto-scaling | Development, variable workloads |\n\n## Extension Methods\n\nThe SDK provides extension methods on `SubscriptionResource` and `ResourceGroupResource`:\n\n```csharp\n\u002F\u002F On SubscriptionResource\nsubscription.GetDurableTaskSchedulers();           \u002F\u002F List all in subscription\nsubscription.GetDurableTaskSchedulersAsync();      \u002F\u002F Async enumerable\n\n\u002F\u002F On ResourceGroupResource  \nresourceGroup.GetDurableTaskSchedulers();          \u002F\u002F Get collection\nresourceGroup.GetDurableTaskSchedulerAsync(name);  \u002F\u002F Get by name\n\n\u002F\u002F On ArmClient\narmClient.GetDurableTaskSchedulerResource(id);     \u002F\u002F Get by resource ID\narmClient.GetDurableTaskHubResource(id);           \u002F\u002F Get task hub by ID\n```\n\n## Best Practices\n\n1. **Use `WaitUntil.Completed`** for operations that must finish before proceeding\n2. **Use `WaitUntil.Started`** when you want to poll manually or run operations in parallel\n3. **Always use `DefaultAzureCredential`** — never hardcode keys\n4. **Handle `RequestFailedException`** for ARM API errors\n5. **Use `CreateOrUpdateAsync`** for idempotent operations\n6. **Delete task hubs before schedulers** — schedulers with task hubs cannot be deleted\n7. **Use IP allowlists** for network security in production\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    var operation = await schedulerCollection.CreateOrUpdateAsync(\n        WaitUntil.Completed, schedulerName, schedulerData);\n}\ncatch (RequestFailedException ex) when (ex.Status == 409)\n{\n    Console.WriteLine(\"Scheduler already exists\");\n}\ncatch (RequestFailedException ex) when (ex.Status == 404)\n{\n    Console.WriteLine(\"Resource group not found\");\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}\");\n}\n```\n\n## Complete Example\n\n```csharp\nusing Azure;\nusing Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.DurableTask;\nusing Azure.ResourceManager.DurableTask.Models;\nusing Azure.ResourceManager.Resources;\n\n\u002F\u002F Setup\nvar credential = new DefaultAzureCredential();\nvar armClient = new ArmClient(credential);\n\nvar subscriptionId = Environment.GetEnvironmentVariable(\"AZURE_SUBSCRIPTION_ID\")!;\nvar resourceGroupName = Environment.GetEnvironmentVariable(\"AZURE_RESOURCE_GROUP\")!;\n\nvar subscription = armClient.GetSubscriptionResource(\n    new ResourceIdentifier($\"\u002Fsubscriptions\u002F{subscriptionId}\"));\nvar resourceGroup = await subscription.GetResourceGroupAsync(resourceGroupName);\n\n\u002F\u002F Create scheduler\nvar schedulerData = new DurableTaskSchedulerData(AzureLocation.EastUS)\n{\n    Properties = new DurableTaskSchedulerProperties\n    {\n        Sku = new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Dedicated)\n        {\n            Capacity = 1\n        }\n    }\n};\n\nvar schedulerCollection = resourceGroup.Value.GetDurableTaskSchedulers();\nvar schedulerOp = await schedulerCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed, \"my-scheduler\", schedulerData);\nvar scheduler = schedulerOp.Value;\n\nConsole.WriteLine($\"Scheduler endpoint: {scheduler.Data.Properties.Endpoint}\");\n\n\u002F\u002F Create task hub\nvar taskHubData = new DurableTaskHubData();\nvar taskHubOp = await scheduler.GetDurableTaskHubs().CreateOrUpdateAsync(\n    WaitUntil.Completed, \"my-taskhub\", taskHubData);\nvar taskHub = taskHubOp.Value;\n\nConsole.WriteLine($\"Task Hub: {taskHub.Data.Name}\");\n\n\u002F\u002F Cleanup\nawait taskHub.DeleteAsync(WaitUntil.Completed);\nawait scheduler.DeleteAsync(WaitUntil.Completed);\n```\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `Azure.ResourceManager.DurableTask` | Management plane (this SDK) | `dotnet add package Azure.ResourceManager.DurableTask` |\n| `Microsoft.DurableTask.Client.AzureManaged` | Data plane (orchestrations, activities) | `dotnet add package Microsoft.DurableTask.Client.AzureManaged` |\n| `Microsoft.DurableTask.Worker.AzureManaged` | Worker for running orchestrations | `dotnet add package Microsoft.DurableTask.Worker.AzureManaged` |\n| `Azure.Identity` | Authentication | `dotnet add package Azure.Identity` |\n| `Azure.ResourceManager` | Base ARM SDK | `dotnet add package Azure.ResourceManager` |\n\n## Source Reference\n\n- [GitHub: Azure.ResourceManager.DurableTask](https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Ftree\u002Fmain\u002Fsdk\u002Fdurabletask\u002FAzure.ResourceManager.DurableTask)\n- [NuGet: Azure.ResourceManager.DurableTask](https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FAzure.ResourceManager.DurableTask)\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# Azure.ResourceManager.DurableTask (.NET)\n\nManagement plane SDK for provisioning and managing Azure Durable Task Scheduler resources via Azure Resource Manager.\n\n> **⚠️ Management vs Data Plane**\n> - **This SDK (Azure.ResourceManager.DurableTask)**: Create schedulers, task hubs, configure retention policies\n> - **Data Plane SDK (Microsoft.DurableTask.Client.AzureManaged)**: Start orchestrations, query instances, send events\n\n## Installation\n\n```bash\ndotnet add package Azure.ResourceManager.DurableTask\ndotnet add package Azure.Identity\n```\n\n**Current Versions**: Stable v1.0.0 (2025-11-03), Preview v1.0.0-beta.1 (2025-04-24)\n**API Version**: 2025-11-01\n\n## Environment Variables\n\n```bash\nAZURE_SUBSCRIPTION_ID=\u003Cyour-subscription-id>\nAZURE_RESOURCE_GROUP=\u003Cyour-resource-group>\n# For service principal auth (optional)\nAZURE_TENANT_ID=\u003Ctenant-id>\nAZURE_CLIENT_ID=\u003Cclient-id>\nAZURE_CLIENT_SECRET=\u003Cclient-secret>\n```\n\n## Authentication\n\n```csharp\nusing Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.DurableTask;\n\n\u002F\u002F Always use DefaultAzureCredential\nvar credential = new DefaultAzureCredential();\nvar armClient = new ArmClient(credential);\n\n\u002F\u002F Get subscription\nvar subscriptionId = Environment.GetEnvironmentVariable(\"AZURE_SUBSCRIPTION_ID\");\nvar subscription = armClient.GetSubscriptionResource(\n    new ResourceIdentifier($\"\u002Fsubscriptions\u002F{subscriptionId}\"));\n```\n\n## Resource Hierarchy\n\n```\nArmClient\n└── SubscriptionResource\n    └── ResourceGroupResource\n        └── DurableTaskSchedulerResource\n            ├── DurableTaskHubResource\n            └── DurableTaskRetentionPolicyResource\n```\n\n## Core Workflow\n\n### 1. Create Durable Task Scheduler\n\n```csharp\nusing Azure.ResourceManager.DurableTask;\nusing Azure.ResourceManager.DurableTask.Models;\n\n\u002F\u002F Get resource group\nvar resourceGroup = await subscription\n    .GetResourceGroupAsync(\"my-resource-group\");\n\n\u002F\u002F Define scheduler with Dedicated SKU\nvar schedulerData = new DurableTaskSchedulerData(AzureLocation.EastUS)\n{\n    Properties = new DurableTaskSchedulerProperties\n    {\n        Sku = new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Dedicated)\n        {\n            Capacity = 1  \u002F\u002F Number of instances\n        },\n        \u002F\u002F Optional: IP allowlist for network security\n        IPAllowlist = { \"10.0.0.0\u002F24\", \"192.168.1.0\u002F24\" }\n    }\n};\n\n\u002F\u002F Create scheduler (long-running operation)\nvar schedulerCollection = resourceGroup.Value.GetDurableTaskSchedulers();\nvar operation = await schedulerCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-scheduler\",\n    schedulerData);\n\nDurableTaskSchedulerResource scheduler = operation.Value;\nConsole.WriteLine($\"Scheduler created: {scheduler.Data.Name}\");\nConsole.WriteLine($\"Endpoint: {scheduler.Data.Properties.Endpoint}\");\n```\n\n### 2. Create Scheduler with Consumption SKU\n\n```csharp\n\u002F\u002F Consumption SKU (serverless)\nvar consumptionSchedulerData = new DurableTaskSchedulerData(AzureLocation.EastUS)\n{\n    Properties = new DurableTaskSchedulerProperties\n    {\n        Sku = new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Consumption)\n        \u002F\u002F No capacity needed for consumption\n    }\n};\n\nvar operation = await schedulerCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-serverless-scheduler\",\n    consumptionSchedulerData);\n```\n\n### 3. Create Task Hub\n\n```csharp\n\u002F\u002F Task hubs are created under a scheduler\nvar taskHubData = new DurableTaskHubData\n{\n    \u002F\u002F Properties are optional for basic task hub\n};\n\nvar taskHubCollection = scheduler.GetDurableTaskHubs();\nvar hubOperation = await taskHubCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-taskhub\",\n    taskHubData);\n\nDurableTaskHubResource taskHub = hubOperation.Value;\nConsole.WriteLine($\"Task Hub created: {taskHub.Data.Name}\");\n```\n\n### 4. List Schedulers\n\n```csharp\n\u002F\u002F List all schedulers in subscription\nawait foreach (var sched in subscription.GetDurableTaskSchedulersAsync())\n{\n    Console.WriteLine($\"Scheduler: {sched.Data.Name}\");\n    Console.WriteLine($\"  Location: {sched.Data.Location}\");\n    Console.WriteLine($\"  SKU: {sched.Data.Properties.Sku?.Name}\");\n    Console.WriteLine($\"  Endpoint: {sched.Data.Properties.Endpoint}\");\n}\n\n\u002F\u002F List schedulers in resource group\nvar schedulers = resourceGroup.Value.GetDurableTaskSchedulers();\nawait foreach (var sched in schedulers.GetAllAsync())\n{\n    Console.WriteLine($\"Scheduler: {sched.Data.Name}\");\n}\n```\n\n### 5. Get Scheduler by Name\n\n```csharp\n\u002F\u002F Get existing scheduler\nvar existingScheduler = await schedulerCollection.GetAsync(\"my-scheduler\");\nConsole.WriteLine($\"Found: {existingScheduler.Value.Data.Name}\");\n\n\u002F\u002F Or use extension method\nvar schedulerResource = armClient.GetDurableTaskSchedulerResource(\n    DurableTaskSchedulerResource.CreateResourceIdentifier(\n        subscriptionId,\n        \"my-resource-group\",\n        \"my-scheduler\"));\nvar scheduler = await schedulerResource.GetAsync();\n```\n\n### 6. Update Scheduler\n\n```csharp\n\u002F\u002F Get current scheduler\nvar scheduler = await schedulerCollection.GetAsync(\"my-scheduler\");\n\n\u002F\u002F Update with new configuration\nvar updateData = new DurableTaskSchedulerData(scheduler.Value.Data.Location)\n{\n    Properties = new DurableTaskSchedulerProperties\n    {\n        Sku = new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Dedicated)\n        {\n            Capacity = 2  \u002F\u002F Scale up\n        },\n        IPAllowlist = { \"10.0.0.0\u002F16\" }  \u002F\u002F Update IP allowlist\n    }\n};\n\nvar updateOperation = await schedulerCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"my-scheduler\",\n    updateData);\n```\n\n### 7. Delete Resources\n\n```csharp\n\u002F\u002F Delete task hub first\nvar taskHub = await scheduler.GetDurableTaskHubs().GetAsync(\"my-taskhub\");\nawait taskHub.Value.DeleteAsync(WaitUntil.Completed);\n\n\u002F\u002F Then delete scheduler\nawait scheduler.DeleteAsync(WaitUntil.Completed);\n```\n\n### 8. Manage Retention Policies\n\n```csharp\n\u002F\u002F Get retention policy collection\nvar retentionPolicies = scheduler.GetDurableTaskRetentionPolicies();\n\n\u002F\u002F Create or update retention policy\nvar retentionData = new DurableTaskRetentionPolicyData\n{\n    Properties = new DurableTaskRetentionPolicyProperties\n    {\n        \u002F\u002F Configure retention settings\n    }\n};\n\nvar retentionOperation = await retentionPolicies.CreateOrUpdateAsync(\n    WaitUntil.Completed,\n    \"default\",  \u002F\u002F Policy name\n    retentionData);\n```\n\n## Key Types Reference\n\n| Type | Purpose |\n|------|---------|\n| `ArmClient` | Entry point for all ARM operations |\n| `DurableTaskSchedulerResource` | Represents a Durable Task Scheduler |\n| `DurableTaskSchedulerCollection` | Collection for scheduler CRUD |\n| `DurableTaskSchedulerData` | Scheduler creation\u002Fupdate payload |\n| `DurableTaskSchedulerProperties` | Scheduler configuration (SKU, IPAllowlist) |\n| `DurableTaskSchedulerSku` | SKU configuration (Name, Capacity, RedundancyState) |\n| `DurableTaskSchedulerSkuName` | SKU options: `Dedicated`, `Consumption` |\n| `DurableTaskHubResource` | Represents a Task Hub |\n| `DurableTaskHubCollection` | Collection for task hub CRUD |\n| `DurableTaskHubData` | Task hub creation payload |\n| `DurableTaskRetentionPolicyResource` | Retention policy management |\n| `DurableTaskRetentionPolicyData` | Retention policy configuration |\n| `DurableTaskExtensions` | Extension methods for ARM client |\n\n## SKU Options\n\n| SKU | Description | Use Case |\n|-----|-------------|----------|\n| `Dedicated` | Fixed capacity with configurable instances | Production workloads, predictable performance |\n| `Consumption` | Serverless, auto-scaling | Development, variable workloads |\n\n## Extension Methods\n\nThe SDK provides extension methods on `SubscriptionResource` and `ResourceGroupResource`:\n\n```csharp\n\u002F\u002F On SubscriptionResource\nsubscription.GetDurableTaskSchedulers();           \u002F\u002F List all in subscription\nsubscription.GetDurableTaskSchedulersAsync();      \u002F\u002F Async enumerable\n\n\u002F\u002F On ResourceGroupResource  \nresourceGroup.GetDurableTaskSchedulers();          \u002F\u002F Get collection\nresourceGroup.GetDurableTaskSchedulerAsync(name);  \u002F\u002F Get by name\n\n\u002F\u002F On ArmClient\narmClient.GetDurableTaskSchedulerResource(id);     \u002F\u002F Get by resource ID\narmClient.GetDurableTaskHubResource(id);           \u002F\u002F Get task hub by ID\n```\n\n## Best Practices\n\n1. **Use `WaitUntil.Completed`** for operations that must finish before proceeding\n2. **Use `WaitUntil.Started`** when you want to poll manually or run operations in parallel\n3. **Always use `DefaultAzureCredential`** — never hardcode keys\n4. **Handle `RequestFailedException`** for ARM API errors\n5. **Use `CreateOrUpdateAsync`** for idempotent operations\n6. **Delete task hubs before schedulers** — schedulers with task hubs cannot be deleted\n7. **Use IP allowlists** for network security in production\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    var operation = await schedulerCollection.CreateOrUpdateAsync(\n        WaitUntil.Completed, schedulerName, schedulerData);\n}\ncatch (RequestFailedException ex) when (ex.Status == 409)\n{\n    Console.WriteLine(\"Scheduler already exists\");\n}\ncatch (RequestFailedException ex) when (ex.Status == 404)\n{\n    Console.WriteLine(\"Resource group not found\");\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}\");\n}\n```\n\n## Complete Example\n\n```csharp\nusing Azure;\nusing Azure.Identity;\nusing Azure.ResourceManager;\nusing Azure.ResourceManager.DurableTask;\nusing Azure.ResourceManager.DurableTask.Models;\nusing Azure.ResourceManager.Resources;\n\n\u002F\u002F Setup\nvar credential = new DefaultAzureCredential();\nvar armClient = new ArmClient(credential);\n\nvar subscriptionId = Environment.GetEnvironmentVariable(\"AZURE_SUBSCRIPTION_ID\")!;\nvar resourceGroupName = Environment.GetEnvironmentVariable(\"AZURE_RESOURCE_GROUP\")!;\n\nvar subscription = armClient.GetSubscriptionResource(\n    new ResourceIdentifier($\"\u002Fsubscriptions\u002F{subscriptionId}\"));\nvar resourceGroup = await subscription.GetResourceGroupAsync(resourceGroupName);\n\n\u002F\u002F Create scheduler\nvar schedulerData = new DurableTaskSchedulerData(AzureLocation.EastUS)\n{\n    Properties = new DurableTaskSchedulerProperties\n    {\n        Sku = new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Dedicated)\n        {\n            Capacity = 1\n        }\n    }\n};\n\nvar schedulerCollection = resourceGroup.Value.GetDurableTaskSchedulers();\nvar schedulerOp = await schedulerCollection.CreateOrUpdateAsync(\n    WaitUntil.Completed, \"my-scheduler\", schedulerData);\nvar scheduler = schedulerOp.Value;\n\nConsole.WriteLine($\"Scheduler endpoint: {scheduler.Data.Properties.Endpoint}\");\n\n\u002F\u002F Create task hub\nvar taskHubData = new DurableTaskHubData();\nvar taskHubOp = await scheduler.GetDurableTaskHubs().CreateOrUpdateAsync(\n    WaitUntil.Completed, \"my-taskhub\", taskHubData);\nvar taskHub = taskHubOp.Value;\n\nConsole.WriteLine($\"Task Hub: {taskHub.Data.Name}\");\n\n\u002F\u002F Cleanup\nawait taskHub.DeleteAsync(WaitUntil.Completed);\nawait scheduler.DeleteAsync(WaitUntil.Completed);\n```\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `Azure.ResourceManager.DurableTask` | Management plane (this SDK) | `dotnet add package Azure.ResourceManager.DurableTask` |\n| `Microsoft.DurableTask.Client.AzureManaged` | Data plane (orchestrations, activities) | `dotnet add package Microsoft.DurableTask.Client.AzureManaged` |\n| `Microsoft.DurableTask.Worker.AzureManaged` | Worker for running orchestrations | `dotnet add package Microsoft.DurableTask.Worker.AzureManaged` |\n| `Azure.Identity` | Authentication | `dotnet add package Azure.Identity` |\n| `Azure.ResourceManager` | Base ARM SDK | `dotnet add package Azure.ResourceManager` |\n\n## Source Reference\n\n- [GitHub: Azure.ResourceManager.DurableTask](https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Ftree\u002Fmain\u002Fsdk\u002Fdurabletask\u002FAzure.ResourceManager.DurableTask)\n- [NuGet: Azure.ResourceManager.DurableTask](https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FAzure.ResourceManager.DurableTask)\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{},"release\u002Fv4.2.11-panel-pro","a92ea02bcf7e2b3dbaf46d49696c29a3cb490d4f",".github\u002Fskills\u002Fazure-resource-manager-durabletask-dotnet","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-","https:\u002F\u002Fgithub.com\u002Fjaviertarazon","2026-07-12 07:10:45",{"source":7,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add javiertarazon\u002Fide-agente-free-jt7- --skill azure-resource-manager-durabletask-dotnet",{"tool":39,"command":40},"bunx","bunx skills add javiertarazon\u002Fide-agente-free-jt7- --skill azure-resource-manager-durabletask-dotnet",{"tool":42,"command":43},"pnpm","pnpm dlx skills add javiertarazon\u002Fide-agente-free-jt7- --skill azure-resource-manager-durabletask-dotnet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fazure-resource-manager-durabletask-dotnet\u002FSKILL.md",true,[],[48,80,107,127,142,164],{"skillNo":49,"name":50,"nameZh":6,"description":51,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":59,"publishedAt":22},"01M71TQ7Q6Z10VWF3C2H5X1KW9","zustand-store-ts","Create Zustand stores with TypeScript, subscribeWithSelector middleware, and proper state\u002Faction separation. Use when building React state management, creating global stores, or implementing reacti...","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fzustand-store-ts\u002FSKILL.md",[54],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79],"zustand","store","zustand store ts","community","middleware","implementing","use","react state management","when","unknown","react","with","state","create","state management","typescript","action","management","separation","global",{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":89,"publishedAt":22},"01M71TQ5EAR40G6W0MV5ZDVEZT","zoom-automation","Automate Zoom meeting creation, management, recordings, webinars, and participant tracking via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fzoom-automation\u002FSKILL.md",[86],{"categoryNo":87,"categoryName":88,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000023","Skill与智能体开发",[90,91,92,63,93,94,95,96,97,69,98,99,100,101,102,103,104,105,77,106],"zoom automation","zoom","automation","creation","for","search","schemas","MCP","first","via","meeting","search tools","tracking","webinars","composio","recordings","Tools",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":114,"publishedAt":22},"01M71TQ29B1EYBCEAP1ZBGXQ1A","zoho-crm-automation","Automate Zoho CRM tasks via Rube MCP (Composio): create\u002Fupdate records, search contacts, manage leads, and convert leads. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fzoho-crm-automation\u002FSKILL.md",[113],{"categoryNo":87,"categoryName":88,"taxonomyType":57,"taxonomyTypeDesc":58},[115,116,92,117,118,119,63,120,121,94,122,95,96,123,97,69,124,125,126,73],"crm automation","zoho crm automation","crm","zoho crm","zoho","leads","manage leads","manage","records","convert","tasks","contacts",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":134,"publishedAt":22},"01M71TPZPMN60DH0XV58KVHY23","zendesk-automation","Automate Zendesk tasks via Rube MCP (Composio): tickets, users, organizations, replies. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fzendesk-automation\u002FSKILL.md",[133],{"categoryNo":87,"categoryName":88,"taxonomyType":57,"taxonomyTypeDesc":58},[135,92,136,63,94,95,96,97,137,69,125,138,139,98,99,140,101,104,106,141],"zendesk automation","zendesk","organizations","replies","users","tickets","automate",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":148,"publishedAt":22},"01M71TPXDWKHKG4N6TVEPXWD0N","zapier-make-patterns","No-code automation democratizes workflow building. Zapier and Make (formerly Integromat) let non-developers automate business processes without writing code. But no-code doesn't mean no-complexity ...","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fzapier-make-patterns\u002FSKILL.md",[],[149,150,151,152,153,154,155,156,157,92,158,69,159,160,161,162,163,141],"zapier make patterns","zapier","patterns","make","No-Code","complexity","writing","spawner","business","workflow","code","integromat","apache","processes","but",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":173,"publishedAt":22},"01M71TPT5T10WXNKW9G7ZXZ27W","youtube-summarizer","Extract transcripts from YouTube videos and generate comprehensive, detailed summaries using intelligent analysis frameworks","https:\u002F\u002Fgithub.com\u002Fjaviertarazon\u002Fide-agente-free-jt7-\u002Fblob\u002Frelease\u002Fv4.2.11-panel-pro\u002F.github\u002Fskills\u002Fyoutube-summarizer\u002FSKILL.md",[170],{"categoryNo":171,"categoryName":172,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000016","图像与多媒体",[174,175,176,177,63,178,179,180,181,182,183,184,159,185,186,187,188,189,190,191],"summarizer","youtube","youtube summarizer","Video","content-analysis","frameworks","copilot","2025","github-copilot","extract transcripts","analysis","codex","cli","summaries","github","generate","summarization","2026"]