/DistributedLeaseManager

A simple C#/.NET distributed lease/lock manager (DLM) implementation with multiple storage options

Primary LanguageC#MIT LicenseMIT

DistributedLeaseManager

NuGet packages

NuGet
NuGet
NuGet
NuGet

Description

A simple C#/.NET distributed lease/lock manager (DLM) 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:

  2. 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:

    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!