public async Task Execute(DBConnectionNames connNames, string lockName, Func <Task> callBack, int timeout = -1) { await using (DBTransactionScope transactionScope = new DBTransactionScope(TransactionScopeOption.Required, new TransactionOptions() { IsolationLevel = IsolationLevel.ReadCommitted, Timeout = new TimeSpan(0, 30, 0) })) { try { await _applicationLockStore.Lock(connNames, lockName, timeout); await callBack(); } finally { await _applicationLockStore.UnLock(connNames, lockName); } transactionScope.Complete(); } }