RolesExtensionsExecuteInRolesLockAsync - метод
Асинхронно выполняет действие
actionFunc внутри эксклюзивной блокировки на вычисление состава ролей или замещений.
Никакое другое вычисление не сможет быть выполнено, пока выполняется действие.
При этом создаётся операция
LockOperationID с указанным описанием
operationDescription.
Возвращает признак того, что блокировка была взята и действие было выполнено.
Значение
false возвращается, если блокировку взять не удалось из-за таймаута при ожидании блокировки.
При взятии блокировки все операции не обязательно выполняются в одном и том же соединении с базой данных.
Использование нескольких соединений может быть полезно для больших таймаутов,
чтобы не удерживать одно и то же соединение несколько минут.
Чтобы гарантировать выполнение на одном и том же соединении с БД,
вызовите метод внутри блока
using(dbScope.Create()) { ... }.
Пространство имён: Tessa.RolesСборка: Tessa (в Tessa.dll) Версия: 3.6.0.22
public static Task<bool> ExecuteInRolesLockAsync(
this IOperationRepository operationRepository,
string operationDescription,
Func<CancellationToken, Task> actionFunc,
ILogger logger = null,
int timeoutSeconds = -1,
CancellationToken cancellationToken = default
)
<ExtensionAttribute>
Public Shared Function ExecuteInRolesLockAsync (
operationRepository As IOperationRepository,
operationDescription As String,
actionFunc As Func(Of CancellationToken, Task),
Optional logger As ILogger = Nothing,
Optional timeoutSeconds As Integer = -1,
Optional cancellationToken As CancellationToken = Nothing
) As Task(Of Boolean)
public:
[ExtensionAttribute]
static Task<bool>^ ExecuteInRolesLockAsync(
IOperationRepository^ operationRepository,
String^ operationDescription,
Func<CancellationToken, Task^>^ actionFunc,
ILogger^ logger = nullptr,
int timeoutSeconds = -1,
CancellationToken cancellationToken = CancellationToken()
)
[<ExtensionAttribute>]
static member ExecuteInRolesLockAsync :
operationRepository : IOperationRepository *
operationDescription : string *
actionFunc : Func<CancellationToken, Task> *
?logger : ILogger *
?timeoutSeconds : int *
?cancellationToken : CancellationToken
(* Defaults:
let _logger = defaultArg logger null
let _timeoutSeconds = defaultArg timeoutSeconds -1
let _cancellationToken = defaultArg cancellationToken new CancellationToken()
*)
-> Task<bool>
- operationRepository IOperationRepository
- Репозиторий, управляющий операциями. Не равен null.
- operationDescription String
-
Описание созданной операции. Может быть строкой локализации. Может быть равен null.
- actionFunc FuncCancellationToken, Task
- Асинхронное действие, выполняемое внутри блокировки. Не равно null.
- logger ILogger (Optional)
-
Объект, выполняющий логирование, или null, если логирование выполняется объектом по умолчанию.
- timeoutSeconds Int32 (Optional)
-
Таймаут взятия блокировки в секундах. Если указано отрицательное число (по умолчанию),
то используется настройка RolesLockTimeoutSeconds в файле app.json.
- cancellationToken CancellationToken (Optional)
- Объект, посредством которого можно отменить асинхронную задачу.
TaskBoolean
Асинхронная задача, которая возвращает
true, если блокировка успешно взята, действие выполнено, и блокировка освобождена;
false, если блокировку не удалось взять из-за таймаута.
Во всех остальных случаях выбрасывается исключение.
В Visual Basic и C# этот метод можно вызывать как метод экземпляра для любого объекта типа
IOperationRepository. При вызове метода для экземпляра следует опускать первый параметр. Дополнительные сведения см. в разделе
Методы расширения (Visual Basic) или
Методы расширения (Руководство по программированию в C#).