Есть ли в Azure готовый способ распределенной блокировки с помощью ключа? - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу иметь возможность писать код вроде

using (await LockAsync(x.Id))
{
    // here goes code that is unsafe with respect to x.Id
    // because it can be executed in multiple threads on
    // the same instance or on multiple instances (e.g.
    // multiple Azure Functions
}

Я знаю, что есть готовые способы блокировки всего контекста выполнения без использования ключа (например, [ActivityTrigger] в функциях) иЯ знаю, что могу свернуть свою собственную блокировку на ключе с использованием аренды BLOB-объектов, но есть ли готовый способ блокировки с помощью ключа?

1 Ответ

0 голосов
/ 15 августа 2019

Вы можете использовать распределенную блокировку Redis.

Пакет RedLock.net предоставляет именно то, что вам нужно:

var resource = "the-thing-we-are-locking-on";
var expiry = TimeSpan.FromSeconds(30);


using (var redLock = await redlockFactory.CreateLockAsync(resource, expiry)) // there are also non async Create() methods
{
   // make sure we got the lock
   if (redLock.IsAcquired)
   {
    // do stuff
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...