Exemple #1
0
        private async Task CheckIsStillLocked()
        {
            if (Status != DistributedLockStatus.Acquired)
            {
                return;
            }

            if (!await _lockManager.CheckIsStillLocked(_settings))
            {
                Status = DistributedLockStatus.Lost;
            }
        }
Exemple #2
0
        private async Task CheckIsStillLockedAsync()
        {
            if (Status != DistributedLockStatus.Acquired)
            {
                return;
            }

            if (!await _lockManager.CheckIsStillLockedAsync(_settings).ConfigureAwait(false))
            {
                Status = DistributedLockStatus.Lost;
            }
        }
Exemple #3
0
        /// <summary>
        /// Ensures that the lock is still valid, otherwise tries to re-acquire it.
        /// </summary>
        /// <returns></returns>
        public async Task Renew(CancellationToken cancellationToken = default)
        {
            if (Status == DistributedLockStatus.Released)
            {
                throw new InvalidOperationException("This lock was explicitly released and cannot be renewed.");
            }

            await CheckIsStillLocked();

            if (Status == DistributedLockStatus.Acquired)
            {
                await _lockManager.SendHeartbeat(_settings);
            }
            else
            {
                await _lockManager.Acquire(_settings, cancellationToken);

                Status = DistributedLockStatus.Acquired;
            }
        }
Exemple #4
0
 public async Task Release()
 {
     Status = DistributedLockStatus.Released;
     await _lockManager.Release(_settings);
 }
Exemple #5
0
 /// <summary>
 ///     Releases the lock.
 /// </summary>
 /// <returns>
 ///     A <see cref="Task" /> representing the asynchronous operation.
 /// </returns>
 public async Task ReleaseAsync()
 {
     Status = DistributedLockStatus.Released;
     await _lockManager.ReleaseAsync(_settings).ConfigureAwait(false);
 }