RolesExtensionsExecuteInRolesLockAsync - метод
Асинхронно выполняет действие
actionAsync внутри эксклюзивной блокировки на вычисление состава ролей или замещений.
Никакое другое вычисление не сможет быть выполнено, пока выполняется действие.
При этом создаётся операция
CalculatingRoles с указанным описанием
operationDescription.
Возвращает признак того, что блокировка была взята и действие было выполнено.
Значение
false возвращается, если блокировку взять не удалось из-за таймаута при ожидании блокировки.
При взятии блокировки все операции не обязательно выполняются в одном и том же соединении с базой данных.
Использование нескольких соединений может быть полезно для больших таймаутов,
чтобы не удерживать одно и то же соединение несколько минут.
Чтобы гарантировать выполнение на одном и том же соединении с БД,
вызовите метод внутри блока
using(dbScope.Create()) { ... }.
Пространство имён: Tessa.RolesСборка: Tessa (в Tessa.dll) Версия: 4.0.4
public static Task<bool> ExecuteInRolesLockAsync(
this IOperationLockingStrategy operationLockingStrategy,
string? operationDescription,
TimeSpan timeout,
Func<CancellationToken, Task> actionAsync,
ILogger? logger = null,
CancellationToken cancellationToken = default
)
<ExtensionAttribute>
Public Shared Function ExecuteInRolesLockAsync (
operationLockingStrategy As IOperationLockingStrategy,
operationDescription As String,
timeout As TimeSpan,
actionAsync As Func(Of CancellationToken, Task),
Optional logger As ILogger = Nothing,
Optional cancellationToken As CancellationToken = Nothing
) As Task(Of Boolean)
public:
[ExtensionAttribute]
static Task<bool>^ ExecuteInRolesLockAsync(
IOperationLockingStrategy^ operationLockingStrategy,
String^ operationDescription,
TimeSpan timeout,
Func<CancellationToken, Task^>^ actionAsync,
ILogger^ logger = nullptr,
CancellationToken cancellationToken = CancellationToken()
)
[<ExtensionAttribute>]
static member ExecuteInRolesLockAsync :
operationLockingStrategy : IOperationLockingStrategy *
operationDescription : string *
timeout : TimeSpan *
actionAsync : Func<CancellationToken, Task> *
?logger : ILogger *
?cancellationToken : CancellationToken
(* Defaults:
let _logger = defaultArg logger null
let _cancellationToken = defaultArg cancellationToken new CancellationToken()
*)
-> Task<bool>
- 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#).