Простая реализация C#/. Net Distributed Lease/Lock Manager (DLM).
Вдохновлен https://github.com/fbeltrao/azfunctions-distributed-locking
Установите одну из реализаций хранения аренды, следуя их инструкциям Readme:
Внутри вашего контроллера/службы введите IDistributedLeaseManager и вызовите метод TryAcquireLease . Убедитесь, был ли результат успешным - если бы он был, то вы можете продолжить операцию; В противном случае кто -то еще приобрел аренду:
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)
} Если вы хотите использовать хранение аренды, отличное от тех, которое предоставлено автором, добавьте в свой проект библиотеку DistributedLeaseManager.Core и реализуйте соответствующий интерфейс (в качестве примера см. Любую из существующих реализаций).
Не стесняйтесь открывать пиар с вашими изменениями, чтобы включить их в упаковку!