SemaphoreSlim Class

[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]

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

Inheritance Hierarchy

System..::.Object
  System.Threading..::.SemaphoreSlim

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

Syntax

Public Class SemaphoreSlim _
    Implements IDisposable
public class SemaphoreSlim : IDisposable

The SemaphoreSlim type exposes the following members.

Constructors

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

Top

Properties

  Name Description
AvailableWaitHandle Returns a WaitHandle that can be used to wait on the semaphore.
CurrentCount Gets the number of threads that will be allowed to enter the SemaphoreSlim.

Top

Methods

  Name Description
Dispose()()() Releases all resources used by the current instance of the SemaphoreSlim class.
Dispose(Boolean) Releases the unmanaged resources used by the ManualResetEventSlim, and optionally releases the managed resources.
Equals(Object) Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Finalize Allows an object to try to free resources and perform other cleanup operations before the Object is reclaimed by garbage collection. (Inherited from Object.)
GetHashCode Serves as a hash function for a particular type. (Inherited from Object.)
GetType Gets the Type of the current instance. (Inherited from Object.)
MemberwiseClone Creates a shallow copy of the current Object. (Inherited from Object.)
Release()()() Exits the SemaphoreSlim once.
Release(Int32) Exits the SemaphoreSlim a specified number of times.
ToString Returns a string that represents the current object. (Inherited from Object.)
Wait()()() Blocks the current thread until it can enter the SemaphoreSlim.
Wait(CancellationToken) Blocks the current thread until it can enter the SemaphoreSlim, while observing a CancellationToken.
Wait(Int32) Blocks the current thread until it can enter the SemaphoreSlim, using a 32-bit signed integer that specifies the timeout.
Wait(TimeSpan) Blocks the current thread until it can enter the SemaphoreSlim, using a TimeSpan to specify the timeout.
Wait(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.
Wait(TimeSpan, CancellationToken) Blocks the current thread until it can enter the SemaphoreSlim, using a TimeSpan that specifies the timeout, while observing a CancellationToken.
WaitAsync()()() Asynchronously waits to enter the SemaphoreSlim.
WaitAsync(CancellationToken) Asynchronously waits to enter the SemaphoreSlim, while observing a CancellationToken.
WaitAsync(Int32) Asynchronously waits to enter the SemaphoreSlim, using a 32-bit signed integer to measure the time interval.
WaitAsync(TimeSpan) Asynchronously waits to enter the SemaphoreSlim, using a TimeSpan to measure the time interval.
WaitAsync(Int32, CancellationToken) Asynchronously waits to enter the SemaphoreSlim, using a 32-bit signed integer to measure the time interval, while observing a CancellationToken.
WaitAsync(TimeSpan, CancellationToken) Asynchronously waits to enter the SemaphoreSlim, using a TimeSpan to measure the time interval, while observing a CancellationToken.

Top

Remarks

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

Examples

The following example shows how to use a SemaphoreSlim:

Version Information

Windows Phone OS

Supported in: 8.1, 8.0

Thread Safety

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.

See Also

Reference

System.Threading Namespace