Class Semaphore
Namespace: Consul
Assembly: Consul.dll
Semaphore is used to implement a distributed semaphore using the Consul KV primitives.
public class Semaphore : IDistributedSemaphore
Inheritance
Implements
Inherited Members
object.Equals(object) , object.Equals(object, object) , object.GetHashCode() , object.GetType() , object.MemberwiseClone() , object.ReferenceEquals(object, object) , object.ToString()
Fields
DefaultMonitorRetryTime
DefaultMonitorRetryTime is how long we wait after a failed monitor check of a semaphore (500 response code). This allows the monitor to ride out brief periods of unavailability, subject to the MonitorRetries setting in the lock options which is by default set to 0, disabling this feature.
public static readonly TimeSpan DefaultMonitorRetryTime
Field Value
DefaultSemaphoreKey
DefaultSemaphoreKey is the key used within the prefix to use for coordination between all the contenders.
public static readonly string DefaultSemaphoreKey
Field Value
DefaultSemaphoreRetryTime
DefaultSemaphoreRetryTime is how long we wait after a failed lock acquisition before attempting to do the lock again. This is so that once a lock-delay is in affect, we do not hot loop retrying the acquisition.
public static readonly TimeSpan DefaultSemaphoreRetryTime
Field Value
DefaultSemaphoreWaitTime
DefaultSemaphoreWaitTime is how long we block for at a time to check if semaphore acquisition is possible. This affects the minimum time it takes to cancel a Semaphore acquisition.
public static readonly TimeSpan DefaultSemaphoreWaitTime
Field Value
Properties
IsHeld
public bool IsHeld { get; }
Property Value
Methods
Acquire()
Acquire attempts to reserve a slot in the semaphore, blocking until success. Not providing a CancellationToken means the thread can block indefinitely until the lock is acquired. There is no notification that the semaphore slot has been lost, but IsHeld may be set to False at any time due to session invalidation, communication errors, operator intervention, etc. It is NOT safe to assume that the slot is held until Release() unless the Session is specifically created without any associated health checks. By default Consul sessions prefer liveness over safety and an application must be able to handle the session being lost.
public Task<CancellationToken> Acquire()
Returns
Acquire(CancellationToken)
Acquire attempts to reserve a slot in the semaphore, blocking until success, interrupted via CancellationToken or if an error is encountered. A provided CancellationToken can be used to abort the attempt. There is no notification that the semaphore slot has been lost, but IsHeld may be set to False at any time due to session invalidation, communication errors, operator intervention, etc. It is NOT safe to assume that the slot is held until Release() unless the Session is specifically created without any associated health checks. By default Consul sessions prefer liveness over safety and an application must be able to handle the session being lost.
public Task<CancellationToken> Acquire(CancellationToken ct)
Parameters
The cancellation token to cancel semaphore acquisition
Returns
Destroy(CancellationToken)
Destroy is used to cleanup the semaphore entry. It is not necessary to invoke. It will fail if the semaphore is in use.
public Task Destroy(CancellationToken ct = default)
Parameters
Returns
Release(CancellationToken)
Release is used to voluntarily give up our semaphore slot. It is an error to call this if the semaphore has not been acquired.
public Task Release(CancellationToken ct = default)