SemaphoreSlim Class

July 28, 2014

A lightweight alternative to Semaphore that limits the number of threads that can access a resource or pool of resources concurrently.

System.Object
  System.Threading.SemaphoreSlim

Namespace:  System.Threading
Assembly:  mscorlib (in mscorlib.dll)

public class SemaphoreSlim : IDisposable

The SemaphoreSlim type exposes the following members.

  NameDescription
Public methodSemaphoreSlim(Int32)Initializes a new instance of the SemaphoreSlim class, specifying the initial number of requests that can be granted concurrently.
Public methodSemaphoreSlim(Int32, Int32)Initializes a new instance of the SemaphoreSlim class, specifying the initial and maximum number of requests that can be granted concurrently.
Top

  NameDescription
Public propertyAvailableWaitHandleReturns a WaitHandle that can be used to wait on the semaphore.
Public propertyCurrentCountGets the number of threads that will be allowed to enter the SemaphoreSlim.
Top

  NameDescription
Public methodDispose()Releases all resources used by the current instance of the SemaphoreSlim class.
Protected methodDispose(Boolean)Releases the unmanaged resources used by the ManualResetEventSlim, and optionally releases the managed resources.
Public methodEquals(Object)Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Protected methodFinalizeAllows an object to try to free resources and perform other cleanup operations before the Object is reclaimed by garbage collection. (Inherited from Object.)
Public methodGetHashCodeServes as a hash function for a particular type. (Inherited from Object.)
Public methodGetTypeGets the Type of the current instance. (Inherited from Object.)
Protected methodMemberwiseCloneCreates a shallow copy of the current Object. (Inherited from Object.)
Public methodRelease()Exits the SemaphoreSlim once.
Public methodRelease(Int32)Exits the SemaphoreSlim a specified number of times.
Public methodToStringReturns a string that represents the current object. (Inherited from Object.)
Public methodWait()Blocks the current thread until it can enter the SemaphoreSlim.
Public methodWait(CancellationToken)Blocks the current thread until it can enter the SemaphoreSlim, while observing a CancellationToken.
Public methodWait(Int32)Blocks the current thread until it can enter the SemaphoreSlim, using a 32-bit signed integer that specifies the timeout.
Public methodWait(TimeSpan)Blocks the current thread until it can enter the SemaphoreSlim, using a TimeSpan to specify the timeout.
Public methodWait(Int32, CancellationToken)Blocks the current thread until it can enter the SemaphoreSlim, using a 32-bit signed integer that specifies the timeout, while observing a CancellationToken.
Public methodWait(TimeSpan, CancellationToken)Blocks the current thread until it can enter the SemaphoreSlim, using a TimeSpan that specifies the timeout, while observing a CancellationToken.
Public methodWaitAsync()Asynchronously waits to enter the SemaphoreSlim.
Public methodWaitAsync(CancellationToken)Asynchronously waits to enter the SemaphoreSlim, while observing a CancellationToken.
Public methodWaitAsync(Int32)Asynchronously waits to enter the SemaphoreSlim, using a 32-bit signed integer to measure the time interval.
Public methodWaitAsync(TimeSpan)Asynchronously waits to enter the SemaphoreSlim, using a TimeSpan to measure the time interval.
Public methodWaitAsync(Int32, CancellationToken)Asynchronously waits to enter the SemaphoreSlim, using a 32-bit signed integer to measure the time interval, while observing a CancellationToken.
Public methodWaitAsync(TimeSpan, CancellationToken)Asynchronously waits to enter the SemaphoreSlim, using a TimeSpan to measure the time interval, while observing a CancellationToken.
Top

The SemaphoreSlim provides a lightweight semaphore class that doesn't use Windows kernel semaphores.

The following example shows how to use a SemaphoreSlim:

Windows Phone OS

Supported in: 8.1, 8.0

All public and protected members of SemaphoreSlim are thread-safe and may be used concurrently from multiple threads, with the exception of Dispose, which must only be used when all other operations on the SemaphoreSlim have completed.

Show:
© 2014 Microsoft