private async Task <LockInfo> acquireLockAsync(IDbConnectionAsync conn, Guid resource, int lockReference, TimeSpan timeout) { var lockInfo = LockInfo.Empty(resource); var newLockRef = Math.Max(1, lockReference + 1); //only acquires lock if old lock reference number matches, and not locked yet. using (var command = await DbAccessHelperAsync.CreateDbCommand(conn, ACQUIRE_lOCK_COMMANDS)) { command.Parameters.Add(new SqlParameter("newLockRef", newLockRef)); command.Parameters.Add(new SqlParameter("timeout", Convert.ToInt64(timeout.TotalMilliseconds))); command.Parameters.Add(new SqlParameter("lockedByMachine", _machineName)); command.Parameters.Add(new SqlParameter("lockedByPID", _PID)); command.Parameters.Add(new SqlParameter("resource", resource)); command.Parameters.Add(new SqlParameter("lockReference", lockReference)); try { var dbLockedTill = (DateTime?)await command.ExecuteScalarAsync(); if (dbLockedTill != null) { var clock = _clockProvider.GetClock(); lockInfo.Update(dbLockedTill, timeout, newLockRef, clock); } } catch (Exception ex) { ex.LogException(); } return(lockInfo); } }