public interface IOperationLockingStrategy
Public Interface IOperationLockingStrategy
public interface class IOperationLockingStrategy
type IOperationLockingStrategy = interface end
ExecuteInLockAsync |
Асинхронно выполняет действие actionAsync внутри эксклюзивной блокировки.
Никакое другое вычисление не сможет быть выполнено, пока выполняется действие.
При этом создаётся запись в Redis с ID = OperationTypeID
и операция cо случайным ID и указанным описанием OperationDescription.
Возвращает идентификатор операции или null, если блокировку взять не удалось. При взятии блокировки все операции не обязательно выполняются в одном и том же соединении с базой данных. Использование нескольких соединений может быть полезно для больших таймаутов, чтобы не удерживать одно и то же соединение несколько минут. Чтобы гарантировать выполнение на одном и том же соединении с БД, вызовите метод внутри блока await using(dbScope.Create()) { ... }. |
ReleaseLockAsync | Снять блокировку, если она была взята без последующего автоматического сброса. |
ExecuteInRolesLockAsync |
Асинхронно выполняет действие actionAsync внутри эксклюзивной блокировки на вычисление состава ролей или замещений.
Никакое другое вычисление не сможет быть выполнено, пока выполняется действие.
При этом создаётся операция CalculatingRoles с указанным описанием operationDescription.
Возвращает признак того, что блокировка была взята и действие было выполнено.
Значение false возвращается, если блокировку взять не удалось из-за таймаута при ожидании блокировки.
При взятии блокировки все операции не обязательно выполняются в одном и том же соединении с базой данных.
Использование нескольких соединений может быть полезно для больших таймаутов,
чтобы не удерживать одно и то же соединение несколько минут.
Чтобы гарантировать выполнение на одном и том же соединении с БД,
вызовите метод внутри блока using(dbScope.Create()) { ... }.
(Определяется RolesExtensions) |