[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CS6Q7MPW0RRT4AN4TTYEXK":3,"skill-same:01M6CS6Q7MPW0RRT4AN4TTYEXK":56},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":27,"linkOnly":28,"markdownContent":29,"markdownBody":30,"frontMatter":31,"refName":34,"commitSha":35,"skillDirectory":36,"forksCount":37,"repositoryHtmlUrl":38,"repositoryHomepageUrl":38,"ownerHtmlUrl":39,"ownerBlogUrl":6,"ownerDescription":40,"updatedAt":41,"install":42,"resources":55},"01M6CS6Q7MPW0RRT4AN4TTYEXK","azure-resource-manager-durabletask-dotnet",null,"Azure Resource Manager SDK for Durable Task Scheduler in .NET.","Sam-06060\u002Fjarvis-assistant","Sam-06060","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F208600848?v=4","01M6CRKT7C7FXD21V6HXF293S0","Samson Frank Ganta","01M6CRKTBEKYFD8YX5Z1GT99EE",6,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fazure-resource-manager-durabletask-dotnet\u002FSKILL.md",[],[19,20,21,22,23,24,25,26],"dotnet","azure","azure resource manager durabletask dotnet","sdk","scheduler","community","task scheduler","task","2026-11-10 10:12:30",false,"---\nname: azure-resource-manager-durabletask-dotnet\ndescription: Azure Resource Manager SDK for Durable Task Scheduler in .NET.\nrisk: unknown\nsource: community\ndate_added: '2026-02-27'\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",{"name":5,"risk":32,"source":24,"date_added":33,"description":7},"unknown","2026-02-27","main","a50a3aa6b39fb0e1b7db88bef1bfc9c93606e126","modules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fazure-resource-manager-durabletask-dotnet",0,"https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant","https:\u002F\u002Fgithub.com\u002FSam-06060","Mobile Application Developer | Kotlin | Flutter, KMP, Swfit, Android,Swift UI | Building at Saar It Resources | Creator of Jarvis (AI Assistant)","2026-06-23 05:13:38",{"source":8,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add Sam-06060\u002Fjarvis-assistant --skill azure-resource-manager-durabletask-dotnet",{"tool":48,"command":49},"bunx","bunx skills add Sam-06060\u002Fjarvis-assistant --skill azure-resource-manager-durabletask-dotnet",{"tool":51,"command":52},"pnpm","pnpm dlx skills add Sam-06060\u002Fjarvis-assistant --skill azure-resource-manager-durabletask-dotnet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fazure-resource-manager-durabletask-dotnet\u002FSKILL.md",true,[],[57,70,86,113,132,159],{"skillNo":58,"name":59,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":67,"publishedAt":27},"01M6GDRVS6FXX3ESH0C9DW01C0","test_skill","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fscratch\u002Ftest_skill\u002FSKILL.md",[62],{"categoryNo":63,"categoryName":64,"taxonomyType":65,"taxonomyTypeDesc":66},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[68,69],"Test Skill","test",{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":27},"01M6GDRQ40HX22MA6XWC31RHHK","zustand-store-ts","Create Zustand stores following established patterns with proper TypeScript types and middleware.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzustand-store-ts\u002FSKILL.md",[],[77,78,79,80,81,82,83,24,84,85],"zustand store ts","zustand","store","with","types","middleware","patterns","create","typescript",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":95,"publishedAt":27},"01M6GDRKEA0WE670SPFWX5GKCN","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\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoom-automation\u002FSKILL.md",[92],{"categoryNo":93,"categoryName":94,"taxonomyType":65,"taxonomyTypeDesc":66},"01JBSEEDCAT000000000000023","Skill与智能体开发",[96,97,98,99,100,101,102,103,104,105,106,107,108,109,24,110,111,112],"automation","zoom automation","zoom","first","Tools","search","MCP","via","meeting","automate","critical","creation","webinars","composio","recordings","management","tracking",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":120,"publishedAt":27},"01M6GDRFS1452PC71JQ38S24HR","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\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoho-crm-automation\u002FSKILL.md",[119],{"categoryNo":93,"categoryName":94,"taxonomyType":65,"taxonomyTypeDesc":66},[121,96,122,123,124,125,126,24,101,127,109,128,106,105,100,129,84,130,102,131],"crm automation","zoho crm","crm","zoho crm automation","zoho","leads","contacts","records","update","tasks","manage",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":141,"publishedAt":27},"01M6GDRCKQBAVTGHX5XBH26KPZ","zod-validation-expert","Expert in Zod — TypeScript-first schema validation. Covers parsing, custom errors, refinements, type inference, and integration with React Hook Form, Next.js, and tRPC.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzod-validation-expert\u002FSKILL.md",[138],{"categoryNo":139,"categoryName":140,"taxonomyType":65,"taxonomyTypeDesc":66},"01JBSEEDCAT000000000000009","前端开发",[142,143,144,145,146,85,147,148,149,150,151,152,80,153,154,155,156,24,157,158],"expert","zod","zod validation expert","validation","react","safe","parsing","errors","schema validation","react hook form","hook","trpc","form","type","next","schema","Next.js",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":166,"publishedAt":27},"01M6GDR658B08K4MY0RWD4A6EH","zeroize-audit","Detects missing zeroization of sensitive data in source code and identifies zeroization removed by compiler optimizations, with assembly-level analysis, and control-flow verification. Use for auditing C\u002FC++\u002FRust code handling secrets, keys, passwords, or other sensitive data.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzeroize-audit\u002FSKILL.md",[165],{"categoryNo":93,"categoryName":94,"taxonomyType":65,"taxonomyTypeDesc":66},[167,168,169,170,171,172,173,174,24,175,176,177,178,179,180,181,182,183,184,102],"zeroize audit","audit","write","passwords","get","project","c++","activate","assembly","read","Bash","secrets","analysis","data","flow","verification","code","rust"]