Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase SemaphoreFullException

 

Publicado: octubre de 2016

Excepción que se produce cuando se llama al método Semaphore.Release en un semáforo cuyo recuento ya se encuentra en el máximo.

Espacio de nombres:   System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

System.Object
  System.Exception
    System.SystemException
      System.Threading.SemaphoreFullException

[SerializableAttribute]
[ComVisibleAttribute(false)]
public class SemaphoreFullException : SystemException

NombreDescripción
System_CAPS_pubmethodSemaphoreFullException()

Inicializa una nueva instancia de la clase SemaphoreFullException con valores predeterminados.

System_CAPS_protmethodSemaphoreFullException(SerializationInfo, StreamingContext)

Inicializa una nueva instancia de la clase SemaphoreFullException con datos serializados.

System_CAPS_pubmethodSemaphoreFullException(String)

Inicializa una nueva instancia de la clase SemaphoreFullException con el mensaje de error especificado.

System_CAPS_pubmethodSemaphoreFullException(String, Exception)

Inicializa una nueva instancia de la clase SemaphoreFullException con el mensaje de error especificado y una referencia a la excepción interna que representa la causa de esta excepción.

NombreDescripción
System_CAPS_pubpropertyData

Obtiene una colección de pares clave-valor que proporcionan más información definida por el usuario sobre la excepción.(Heredado de Exception).

System_CAPS_pubpropertyHelpLink

Obtiene o establece un vínculo al archivo de ayuda asociado a esta excepción.(Heredado de Exception).

System_CAPS_pubpropertyHResult

Obtiene o establece HRESULT, un valor numérico codificado que se asigna a una excepción específica.(Heredado de Exception).

System_CAPS_pubpropertyInnerException

Obtiene la instancia Exception que produjo la excepción actual.(Heredado de Exception).

System_CAPS_pubpropertyMessage

Obtiene un mensaje que describe la excepción actual.(Heredado de Exception).

System_CAPS_pubpropertySource

Devuelve o establece el nombre de la aplicación o del objeto que generó el error.(Heredado de Exception).

System_CAPS_pubpropertyStackTrace

Obtiene una representación de cadena de los marcos inmediatos en la pila de llamadas.(Heredado de Exception).

System_CAPS_pubpropertyTargetSite

Obtiene el método que produjo la excepción actual.(Heredado de Exception).

NombreDescripción
System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_protmethodFinalize()

Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Heredado de Object).

System_CAPS_pubmethodGetBaseException()

Cuando se invalida en una clase derivada, devuelve la clase Exception que representa la causa principal de una o más excepciones posteriores.(Heredado de Exception).

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Cuando se invalida en una clase derivada, establece SerializationInfo con información sobre la excepción.(Heredado de Exception).

System_CAPS_pubmethodGetType()

Obtiene el tipo en tiempo de ejecución de la instancia actual.(Heredado de Exception).

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object).

System_CAPS_pubmethodToString()

Crea y devuelve una representación de cadena de la excepción actual.(Heredado de Exception).

NombreDescripción
System_CAPS_proteventSerializeObjectState

Ocurre cuando una excepción se serializa para crear un objeto de estado de excepción que contenga datos serializados sobre la excepción.(Heredado de Exception).

El recuento de un semáforo es disminuye cada vez que un subproceso entra en el semáforo y aumenta cuando un subproceso libera el semáforo. Cuando el recuento es cero, las solicitudes posteriores se bloquean hasta que otros subprocesos liberan el semáforo. Cuando todos los subprocesos han liberado el semáforo, el recuento es el valor máximo especificado cuando se creó el semáforo. Si un error de programación hace que un subproceso llamar a la Semaphore.Release en este punto, el método un SemaphoreFullException se produce.

System_CAPS_noteNota

La Semaphore clase no exige la identidad del subproceso en las llamadas a la WaitHandle.WaitOne y Semaphore.Release métodos. No es necesario para el mismo subproceso que llamó a WaitOne para llamar a Release.

SemaphoreFullException no indica necesariamente un problema con el código donde se produjo la excepción. Considere el siguiente escenario: subprocesos A y B entran en un semáforo que tiene un recuento máximo de dos. Un error de programación en el subproceso B hace que llame a Release dos veces, para que el recuento del semáforo está lleno. Como resultado, cuando el subproceso A finalmente llama Release, un SemaphoreFullException se produce.

Para obtener una lista con los valores de propiedad iniciales de una instancia de la clase SemaphoreFullException, vea el constructor SemaphoreFullException().

En el ejemplo de código siguiente se muestra cómo puede producir un error de programación en un subproceso un SemaphoreFullException en otro subproceso: dos subprocesos entran en un semáforo. El segundo subproceso libera el semáforo dos veces, mientras que el primer subproceso todavía se está ejecutando la tarea. Cuando el primer subproceso finaliza y libera el semáforo, el recuento del semáforo ya está completo y se produce una excepción.

using System;
using System.Threading;

public class Example
{
    // A semaphore that can satisfy at most two concurrent
    // requests.
    //
    private static Semaphore _pool = new Semaphore(2, 2);

    public static void Main()
    {
        // Create and start two threads, A and B. 
        //
        Thread tA = new Thread(new ThreadStart(ThreadA));
        tA.Start();

        Thread tB = new Thread(new ThreadStart(ThreadB));
        tB.Start();
    }

    private static void ThreadA()
    {
        // Thread A enters the semaphore and simulates a task
        // that lasts a second.
        //
        _pool.WaitOne();
        Console.WriteLine("Thread A entered the semaphore.");

        Thread.Sleep(1000);

        try
        {
            _pool.Release();
            Console.WriteLine("Thread A released the semaphore.");
        }
        catch(Exception ex)
        {
            Console.WriteLine("Thread A: {0}", ex.Message);
        }
    }

    private static void ThreadB()
    {
        // Thread B simulates a task that lasts half a second,
        // then enters the semaphore.
        //
        Thread.Sleep(500);

        _pool.WaitOne();
        Console.WriteLine("Thread B entered the semaphore.");

        // Due to a programming error, Thread B releases the
        // semaphore twice. To fix the program, delete one line.
        _pool.Release();
        _pool.Release();
        Console.WriteLine("Thread B exits successfully.");
    }
}
/* This code example produces the following output:

Thread A entered the semaphore.
Thread B entered the semaphore.
Thread B exits successfully.
Thread A: Adding the given count to the semaphore would cause it to exceed its maximum count.
 */

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 2.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Windows Phone Silverlight
Disponible desde 8.0
Windows Phone
Disponible desde 8.1

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: