Uma implementação simples do C#/. Net Distributed Lase/Lock Manager (DLM).
Inspirado no https://github.com/fbeltrao/azfunctions-distributed-locking
Instale uma das implementações de armazenamento de arrendamento seguindo as instruções de leitura:
Dentro do seu controlador/serviço, injete o IDistributedLeaseManager e ligue para o método TryAcquireLease . Verifique se o resultado foi bem -sucedido - se for, você pode prosseguir com a operação; Caso contrário, outra pessoa adquiriu o contrato:
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)
} Se você deseja usar um armazenamento de arrendamento diferente dos fornecidos pelo autor, adicione a biblioteca DistributedLeaseManager.Core ao seu projeto e implemente a interface correspondente (consulte qualquer uma das implementações existentes como exemplo).
Sinta -se à vontade para abrir um PR com suas alterações para incluí -las no pacote!