Une simple implémentation C # /. Net Distributed Lease / Lock Manager (DLM).
Inspiré par les https://github.com/fbeltrao/azfunctions-stribed-locking
Installez l'une des implémentations de stockage de bail en suivant leurs instructions ReadMe:
À l'intérieur de votre contrôleur / service, injectez le IDistributedLeaseManager et appelez la méthode TryAcquireLease . Vérifiez si le résultat a réussi - si c'était le cas, vous pouvez procéder à l'opération; Sinon, quelqu'un d'autre a acquis le bail:
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)
} Si vous souhaitez utiliser un stockage de bail différent de ceux fournis par l'auteur, ajoutez la bibliothèque DistributedLeaseManager.Core à votre projet et implémentez l'interface correspondante (voir l'une des implémentations existantes comme exemple).
N'hésitez pas à ouvrir un RP avec vos modifications pour les inclure dans le package!