Ejemplo n.º 1
0
        private async Task SendHeartbeats()
        {
            while (!_released)
            {
                await _lockManager.SendHeartbeat(_name);

                await Task.Delay(_heartbeatIntervalInMilliseconds);
            }
        }
Ejemplo n.º 2
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;
            }
        }