OperationLockingStrategyExecuteInLockAsync - метод
Асинхронно выполняет действие
actionAsync внутри эксклюзивной блокировки.
Никакое другое вычисление не сможет быть выполнено, пока выполняется действие.
При этом создаётся запись в Redis с ID =
OperationTypeID
и операция cо случайным ID и указанным описанием
OperationDescription.
Возвращает идентификатор операции или
null, если блокировку взять не удалось.
При взятии блокировки все операции не обязательно выполняются в одном и том же соединении с базой данных.
Использование нескольких соединений может быть полезно для больших таймаутов,
чтобы не удерживать одно и то же соединение несколько минут.
Чтобы гарантировать выполнение на одном и том же соединении с БД,
вызовите метод внутри блока
await using(dbScope.Create()) { ... }.
Пространство имён: Tessa.Platform.OperationsСборка: Tessa (в Tessa.dll) Версия: 4.0.4
public Task<Guid?> ExecuteInLockAsync(
Func<Guid, CancellationToken, Task> actionAsync,
OperationLockOptions options,
ILogger? logger = null,
bool leaveOpen = false,
CancellationToken cancellationToken = default
)
Public Function ExecuteInLockAsync (
actionAsync As Func(Of Guid, CancellationToken, Task),
options As OperationLockOptions,
Optional logger As ILogger = Nothing,
Optional leaveOpen As Boolean = false,
Optional cancellationToken As CancellationToken = Nothing
) As Task(Of Guid?)
public:
virtual Task<Nullable<Guid>>^ ExecuteInLockAsync(
Func<Guid, CancellationToken, Task^>^ actionAsync,
OperationLockOptions^ options,
ILogger^ logger = nullptr,
bool leaveOpen = false,
CancellationToken cancellationToken = CancellationToken()
) sealed
abstract ExecuteInLockAsync :
actionAsync : Func<Guid, CancellationToken, Task> *
options : OperationLockOptions *
?logger : ILogger *
?leaveOpen : bool *
?cancellationToken : CancellationToken
(* Defaults:
let _logger = defaultArg logger null
let _leaveOpen = defaultArg leaveOpen false
let _cancellationToken = defaultArg cancellationToken new CancellationToken()
*)
-> Task<Nullable<Guid>>
override ExecuteInLockAsync :
actionAsync : Func<Guid, CancellationToken, Task> *
options : OperationLockOptions *
?logger : ILogger *
?leaveOpen : bool *
?cancellationToken : CancellationToken
(* Defaults:
let _logger = defaultArg logger null
let _leaveOpen = defaultArg leaveOpen false
let _cancellationToken = defaultArg cancellationToken new CancellationToken()
*)
-> Task<Nullable<Guid>>
- actionAsync FuncGuid, CancellationToken, Task
-
Асинхронное действие, выполняемое внутри блокировки. Параметром получает идентификатор операции. Не равно null.
- options OperationLockOptions
-
Информация о блокировке.
- logger ILogger (Optional)
-
Объект, выполняющий логирование, или null, если логирование выполняется объектом по умолчанию.
- leaveOpen Boolean (Optional)
- Признак того, что операция, создаваемая для блокировки, не удаляется. Её потребуется удалить вручную. Вне зависимости от значения флага, при возникновении ошибки, операция будет удалена.
- cancellationToken CancellationToken (Optional)
- Объект, посредством которого можно отменить асинхронную задачу.
TaskNullableGuid
Асинхронная задача, которая возвращает идентификатор операции или
null, если блокировку взять не удалось.
IOperationLockingStrategyExecuteInLockAsync(FuncGuid, CancellationToken, Task, OperationLockOptions, ILogger, Boolean, CancellationToken)