Durable Task Framework is an open source framework that provides a foundation for workflow as code in .NET platform.
This project aims to extend it with:
- .NET Dependency Injection and Hosting integration
- Administrative and monitoring UI
- EFCore storage with support for InMemory, MySQL, PostgreSQL, SQL Server and some extra features.
- Storage delegation via GRPC protocol
Builds on top of Durable Task Framework to deliver a serverless workflow as code product focused on Azure.
Cadence is a scalable and reliable workflow as code platform built an used by Uber. It is heavily inspired on Durable Functions, but also includes some addicional features like tasks lists and a monitoring UI. Cadence features are used as inspiration for this project.
Temporal is a fork of Cadence backed by a company with the same name and founded by the original creators of Cadence. It is under active development and might end up officially supporting .NET clients.
| Name (click for readme) | Package | Description |
|---|---|---|
| LLL.DurableTask.Client | DI extensions to configure TaskHubClient. | |
| LLL.DurableTask.Worker | DI extensions to configure TaskHubWorker. | |
| LLL.DurableTask.Api | Exposes TaskHubClient operations as REST API. | |
| LLL.DurableTask.Ui | UI to monitor and manage orchestrations. | |
| LLL.DurableTask.Server | Expose storage as API. | |
| LLL.DurableTask.Server.Grpc | GRPC endpoints for server. | |
| LLL.DurableTask.Server.Grpc.Client | Storage implementation using server GRPC endpoints. | |
| LLL.DurableTask.AzureStorage | Dependency injection for Azure Storage | |
| LLL.DurableTask.EFCore | EFCore relational database storage implementation with extra features. | |
| LLL.DurableTask.EFCore.InMemory | EFCore storage InMemory support. | |
| LLL.DurableTask.EFCore.MySql | EFCore storage MySql support. | |
| LLL.DurableTask.EFCore.PostgreSQL | EFCore storage PostgreSQL support. | |
| LLL.DurableTask.EFCore.SqlServer | EFCore storage Sql Server support. |
The following table compares the EFCore storage providers from this project.
| Feature | EFCore PostgreSQL | EFCore MySQL | EFCore SQL Server | EFCore InMemory | Others |
|---|---|---|---|---|---|
| External dependencies | PostgreSQL | MySQL | SQL Server | None | Compare |
| Durable Entities | No | No | No | No | Compare |
| Disconnected environment | Yes | Yes | Yes | Yes | Compare |
| Identity-based connections | Yes¹ | Yes¹ | Yes¹ | N/A | Compare |
| Maximum throughput | Moderate | Moderate | Moderate | Moderate | Compare |
| Maturity | Not battle-tested | Used in production | Not battle-tested | Development only | Compare |
| Worker specialization | Supported | Supported | Supported | Supported | No |
| Input/output observability | Yes | Yes | Yes | Yes | No |
| Enhanced rewind | Yes | Yes | Yes | Yes | No |
| Orchestration tags | Yes | Yes | Yes | Yes | No |
| Full execution history | Yes | Yes | Yes | Yes | No |
| Reliable event delivery | Yes | Yes | Yes | Yes | No |
¹ Supported via EFCore database provider configuration (e.g. Azure AD / Entra ID tokens). Not built into this project directly.
Benchmark running 100 orchestrations with 5 activities each (lower is better):
| Storage Provider | Median | Mean | Std Dev |
|---|---|---|---|
| EFCore InMemory | 1.56 s | 1.88 s | 0.51 s |
| EFCore PostgreSQL | 2.75 s | 2.53 s | 0.37 s |
| EFCore SQL Server | 3.90 s | 3.77 s | 0.54 s |
| EFCore MySQL | 3.88 s | 3.85 s | 0.26 s |
| DurableTask SQL Server¹ | 2.33 s | 2.34 s | 0.07 s |
| Azure Storage (Azurite)¹ | 8.53 s | 8.40 s | 0.89 s |
¹ Included for reference. Azure Storage and DurableTask SQL Server are separate Microsoft packages.
Note: Benchmarks were run locally using Docker containers with BenchmarkDotNet on Apple M1 Pro, .NET 9 (3 warmup + 10 iterations). Azure Storage used the Azurite emulator. Results may vary between runs and environments — these numbers are useful for relative comparison, not absolute performance. See benchmark source for details.
Our components were designed to be independent and highly composable. See below some possible architectures.
See samples for an implementation of the classic book Flight, Car, Hotel with compensation problem using all componentes from above.



