Для изменения размера нажмите или перетащите

OperationsExtensionsExecuteInLockAsync - метод

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

Пространство имён:  Tessa.Platform.Operations
Сборка:  Tessa (в Tessa.dll) Версия: 3.5.0.19
Синтаксис
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
Тип: Tessa.Platform.OperationsIOperationRepository
Репозиторий, управляющий операциями. Не равен null.
operationDescription
Тип: SystemString
Описание созданной операции. Может быть строкой локализации. Может быть равен null.
actionFunc
Тип: SystemFuncGuid, CancellationToken, Task
Асинхронное действие, выполняемое внутри блокировки. Параметром получает идентификатор операции. Не равно null.
logger
Тип: ILogger
Объект, выполняющий логирование, или null, если логирование выполняется объектом по умолчанию.
timeoutSeconds
Тип: SystemInt32
Таймаут взятия блокировки в секундах.
timeoutMessage
Тип: SystemString
Сообщение при невозможности взять блокировку из-за таймаута.
lockOperationTypeID
Тип: SystemGuid
ID типа операции блокировки.
lockName (Optional)
Тип: SystemString
Строка с именем объекта над которым выполняется блокировка. Необходима для понятной запси в логах.
leaveOpen (Optional)
Тип: SystemBoolean
Признак того, что операция, создаваемая для блокировки, не удаляется. Её потребуется удалить вручную.
cancellationToken (Optional)
Тип: System.ThreadingCancellationToken
Объект, посредством которого можно отменить асинхронную задачу.

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

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

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

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