OperationsExtensionsExecuteInLockAsync - метод

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

Definition

Пространство имён: Tessa.Platform.Operations
Сборка: Tessa (в Tessa.dll) Версия: 3.6.0.22
C#
public static Task<(bool Result, Guid OperationID)> ExecuteInLockAsync(
	this IOperationRepository operationRepository,
	string operationDescription,
	Func<Guid, CancellationToken, Task> actionFunc,
	ILogger logger,
	int timeoutSeconds,
	string timeoutMessage,
	Guid lockOperationTypeID,
	string lockName = "Lock",
	bool leaveOpen = false,
	CancellationToken cancellationToken = default
)

Параметры

operationRepository  IOperationRepository
Репозиторий, управляющий операциями. Не равен null.
operationDescription  String
Описание созданной операции. Может быть строкой локализации. Может быть равен null.
actionFunc  FuncGuid, CancellationToken, Task
Асинхронное действие, выполняемое внутри блокировки. Параметром получает идентификатор операции. Не равно null.
logger  ILogger
Объект, выполняющий логирование, или null, если логирование выполняется объектом по умолчанию.
timeoutSeconds  Int32
Таймаут взятия блокировки в секундах.
timeoutMessage  String
Сообщение при невозможности взять блокировку из-за таймаута.
lockOperationTypeID  Guid
ID типа операции блокировки.
lockName  String  (Optional)
Строка с именем объекта над которым выполняется блокировка. Необходима для понятной запси в логах.
leaveOpen  Boolean  (Optional)
Признак того, что операция, создаваемая для блокировки, не удаляется. Её потребуется удалить вручную.
cancellationToken  CancellationToken  (Optional)
Объект, посредством которого можно отменить асинхронную задачу.

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

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

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

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

См. также