https://github.com/f1x3d/distributedleasemanager
A simple C#/.NET distributed lease/lock manager (DLM) implementation with multiple storage options
https://github.com/f1x3d/distributedleasemanager
aspnet aspnetcore concurrency csharp distributed dlm dotnet dotnet-core hacktoberfest lease lock manager ukrainian
Last synced: about 2 months ago
JSON representation
A simple C#/.NET distributed lease/lock manager (DLM) implementation with multiple storage options
- Host: GitHub
- URL: https://github.com/f1x3d/distributedleasemanager
- Owner: f1x3d
- License: mit
- Created: 2023-10-20T22:37:06.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-10-05T23:27:21.000Z (8 months ago)
- Last Synced: 2026-03-02T21:52:12.254Z (3 months ago)
- Topics: aspnet, aspnetcore, concurrency, csharp, distributed, dlm, dotnet, dotnet-core, hacktoberfest, lease, lock, manager, ukrainian
- Language: C#
- Homepage:
- Size: 46.9 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# DistributedLeaseManager
## NuGet packages
[](https://nuget.org/packages/DistributedLeaseManager.Core)\
[](https://nuget.org/packages/DistributedLeaseManager.AzureBlobStorage)\
[](https://nuget.org/packages/DistributedLeaseManager.AzureCosmosDb)\
[](https://nuget.org/packages/DistributedLeaseManager.EntityFrameworkCore)
## Description
A simple C#/.NET [distributed lease/lock manager (DLM)](https://en.wikipedia.org/wiki/Distributed_lock_manager) implementation.
Inspired by the https://github.com/fbeltrao/azfunctions-distributed-locking
## Usage
1. Install one of the lease storage implementations by following their README instructions:
* [Azure Blob Storage](./DistributedLeaseManager.AzureBlobStorage)
* [Azure Cosmos DB](./DistributedLeaseManager.AzureCosmosDb)
* [Entity Framework Core](./DistributedLeaseManager.EntityFrameworkCore) (any database provider supported by the EF Core)
1. Inside your controller/service inject the `IDistributedLeaseManager` and call the `TryAcquireLease` method. Verify if the result was successful - if it was then you can proceed with the operation; otherwise, someone else has acquired the lease:
```csharp
await using var leaseResult = await leaseManager.TryAcquireLease(resourceId, TimeSpan.FromSeconds(5));
if (!leaseResult.IsSuccessful)
{
// Someone else has required the lease for the resource.
// You may want to either retry the acqusition or abort the operation.
}
else
{
// You are the lease owner now and can safely process the resource.
// The lease will be released either when the leaseResult gets disposed
// or when the lease expires (in the example above, in 5 seconds)
}
```
## Contributing / Implementing a custom lease storage
If you'd like to use a lease storage different from the ones provided by the author, add the `DistributedLeaseManager.Core` library to your project and implement the corresponding interface (see any of the existing implementations as an example).
Feel free to open a PR with your changes to include them in the package!