private async Task CheckIsStillLocked() { if (Status != DistributedLockStatus.Acquired) { return; } if (!await _lockManager.CheckIsStillLocked(_settings)) { Status = DistributedLockStatus.Lost; } }
private async Task CheckIsStillLockedAsync() { if (Status != DistributedLockStatus.Acquired) { return; } if (!await _lockManager.CheckIsStillLockedAsync(_settings).ConfigureAwait(false)) { Status = DistributedLockStatus.Lost; } }
/// <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; } }
public async Task Release() { Status = DistributedLockStatus.Released; await _lockManager.Release(_settings); }
/// <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); }