IOperationLockingStrategyExecuteInLockAsync - метод

Асинхронно выполняет действие actionAsync внутри эксклюзивной блокировки. Никакое другое вычисление не сможет быть выполнено, пока выполняется действие. При этом создаётся запись в Redis с ID = OperationTypeID и операция cо случайным ID и указанным описанием OperationDescription.
Возвращает идентификатор операции или null, если блокировку взять не удалось.
При взятии блокировки все операции не обязательно выполняются в одном и том же соединении с базой данных. Использование нескольких соединений может быть полезно для больших таймаутов, чтобы не удерживать одно и то же соединение несколько минут.
Чтобы гарантировать выполнение на одном и том же соединении с БД, вызовите метод внутри блока await using(dbScope.Create()) { ... }.

Definition

Пространство имён: Tessa.Platform.Operations
Сборка: Tessa (в Tessa.dll) Версия: 4.0.4
C#
Task<Guid?> ExecuteInLockAsync(
	Func<Guid, CancellationToken, Task> actionAsync,
	OperationLockOptions options,
	ILogger? logger = null,
	bool leaveOpen = false,
	CancellationToken cancellationToken = default
)

Параметры

actionAsync  FuncGuid, CancellationToken, Task
Асинхронное действие, выполняемое внутри блокировки. Параметром получает идентификатор операции. Не равно null.
options  OperationLockOptions
Информация о блокировке.
logger  ILogger  (Optional)
Объект, выполняющий логирование, или null, если логирование выполняется объектом по умолчанию.
leaveOpen  Boolean  (Optional)
Признак того, что операция, создаваемая для блокировки, не удаляется. Её потребуется удалить вручную. Вне зависимости от значения флага, при возникновении ошибки, операция будет удалена.
cancellationToken  CancellationToken  (Optional)
Объект, посредством которого можно отменить асинхронную задачу.

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

TaskNullableGuid
Асинхронная задача, которая возвращает идентификатор операции или null, если блокировку взять не удалось.

См. также