RolesExtensionsExecuteInRolesLockAsync - метод

Асинхронно выполняет действие actionAsync внутри эксклюзивной блокировки на вычисление состава ролей или замещений. Никакое другое вычисление не сможет быть выполнено, пока выполняется действие. При этом создаётся операция CalculatingRoles с указанным описанием operationDescription. Возвращает признак того, что блокировка была взята и действие было выполнено. Значение false возвращается, если блокировку взять не удалось из-за таймаута при ожидании блокировки. При взятии блокировки все операции не обязательно выполняются в одном и том же соединении с базой данных. Использование нескольких соединений может быть полезно для больших таймаутов, чтобы не удерживать одно и то же соединение несколько минут. Чтобы гарантировать выполнение на одном и том же соединении с БД, вызовите метод внутри блока using(dbScope.Create()) { ... }.

Definition

Пространство имён: Tessa.Roles
Сборка: Tessa (в Tessa.dll) Версия: 4.0.4
C#
public static Task<bool> ExecuteInRolesLockAsync(
	this IOperationLockingStrategy operationLockingStrategy,
	string? operationDescription,
	TimeSpan timeout,
	Func<CancellationToken, Task> actionAsync,
	ILogger? logger = null,
	CancellationToken cancellationToken = default
)

Параметры

operationLockingStrategy  IOperationLockingStrategy
Объект, управляющий блокировками операций. Не равен null.
operationDescription  String
Описание созданной операции. Может быть строкой локализации. Может быть равно null.
timeout  TimeSpan
Таймаут взятия блокировки в секундах.
actionAsync  FuncCancellationToken, Task
Асинхронное действие, выполняемое внутри блокировки. Не равно null.
logger  ILogger  (Optional)
Объект, выполняющий логирование, или null, если логирование выполняется объектом по умолчанию.
cancellationToken  CancellationToken  (Optional)
Объект, посредством которого можно отменить асинхронную задачу.

Возвращаемое значение

TaskBoolean
Асинхронная задача, которая возвращает true, если блокировка успешно взята, действие выполнено, и блокировка освобождена; false, если блокировку не удалось взять из-за таймаута. Во всех остальных случаях выбрасывается исключение.

Примечание об использовании

В Visual Basic и C# этот метод можно вызывать как метод экземпляра для любого объекта типа IOperationLockingStrategy. При вызове метода для экземпляра следует опускать первый параметр. Дополнительные сведения см. в разделе Методы расширения (Visual Basic) или Методы расширения (Руководство по программированию в C#).

См. также