Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

SemaphoreFullException-Klasse

 

Veröffentlicht: Oktober 2016

Diese Ausnahme wird ausgelöst, wenn die Semaphore.Release-Methode für einen Semaphore aufgerufen wird, dessen Zähler bereits den Maximalwert erreicht hat.

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

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

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

NameBeschreibung
System_CAPS_pubmethodSemaphoreFullException()

Initialisiert eine neue Instanz der SemaphoreFullException-Klasse mit Standardwerten.

System_CAPS_protmethodSemaphoreFullException(SerializationInfo, StreamingContext)

Initialisiert eine neue Instanz der SemaphoreFullException-Klasse mit serialisierten Daten.

System_CAPS_pubmethodSemaphoreFullException(String)

Initialisiert eine neue Instanz der SemaphoreFullException-Klasse mit einer angegebenen Fehlermeldung.

System_CAPS_pubmethodSemaphoreFullException(String, Exception)

Initialisiert eine neue Instanz der SemaphoreFullException-Klasse mit einer angegebenen Fehlermeldung und einem Verweis auf die innere Ausnahme, die diese Ausnahme ausgelöst hat.

NameBeschreibung
System_CAPS_pubpropertyData

Ruft eine Auflistung von Schlüssel-Wert-Paaren ab, die zusätzliche benutzerdefinierte Informationen über die Ausnahme bereitstellen.(Geerbt von „Exception“.)

System_CAPS_pubpropertyHelpLink

Ruft einen Link zur Hilfedatei ab, die dieser Ausnahme zugeordnet ist, oder legt einen Link fest.(Geerbt von „Exception“.)

System_CAPS_pubpropertyHResult

Ruft HRESULT ab oder legt HRESULT fest. Dies ist ein codierter Wert, der einer bestimmten Ausnahme zugeordnet ist.(Geerbt von „Exception“.)

System_CAPS_pubpropertyInnerException

Ruft die Exception-Instanz ab, die die aktuelle Ausnahme verursacht hat.(Geerbt von „Exception“.)

System_CAPS_pubpropertyMessage

Ruft eine Meldung ab, die die aktuelle Ausnahme beschreibt.(Geerbt von „Exception“.)

System_CAPS_pubpropertySource

Gibt den Namen der Anwendung oder des Objekts zurück, die bzw. das den Fehler verursacht hat, oder legt diesen fest.(Geerbt von „Exception“.)

System_CAPS_pubpropertyStackTrace

Ruft eine Zeichenfolgendarstellung der unmittelbaren Frames in der Aufrufliste ab.(Geerbt von „Exception“.)

System_CAPS_pubpropertyTargetSite

Ruft die Methode ab, die die aktuelle Ausnahme auslöst.(Geerbt von „Exception“.)

NameBeschreibung
System_CAPS_pubmethodEquals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.(Geerbt von „Object“.)

System_CAPS_protmethodFinalize()

Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Geerbt von „Object“.)

System_CAPS_pubmethodGetBaseException()

Gibt beim Überschreiben in einer abgeleiteten Klasse eine Exception zurück, die die ursprüngliche Ursache für eine oder mehrere nachfolgende Ausnahmen ist.(Geerbt von „Exception“.)

System_CAPS_pubmethodGetHashCode()

Fungiert als die Standardhashfunktion.(Geerbt von „Object“.)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Legt beim Überschreiben in einer abgeleiteten Klasse die SerializationInfo mit Informationen über die Ausnahme fest.(Geerbt von „Exception“.)

System_CAPS_pubmethodGetType()

Ruft den Laufzeittyp der aktuellen Instanz ab.(Geerbt von „Exception“.)

System_CAPS_protmethodMemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.(Geerbt von „Object“.)

System_CAPS_pubmethodToString()

Erstellt eine Zeichenfolgendarstellung der aktuellen Ausnahme und gibt diese zurück.(Geerbt von „Exception“.)

NameBeschreibung
System_CAPS_proteventSerializeObjectState

Tritt auf, wenn eine Ausnahme serialisiert wird, um ein Ausnahmezustandsobjekt zu erstellen, das serialisierte Daten für die Ausnahme enthält.(Geerbt von „Exception“.)

Die Anzahl die auf einem Semaphore wird jedes Mal ein Thread das Semaphor gibt, und inkrementiert, wenn ein Thread das Semaphor freigibt verringert. Wenn die Anzahl Null ist, blockiert nachfolgende Anforderungen, bis andere Threads das Semaphor freigeben. Wenn alle Threads das Semaphor freigegeben haben, wird die Anzahl die den maximalen Wert angegeben, wenn das Semaphor erstellt wurde. Wenn ein Programmierfehler einen Thread Aufrufen der Semaphore.Release -Methode zu diesem Zeitpunkt eine SemaphoreFullException ausgelöst.

System_CAPS_noteHinweis

Die Semaphore -Klasse erzwingt keine Threadidentität für Aufrufe an die WaitHandle.WaitOne und Semaphore.Release Methoden. Es ist nicht erforderlich, für den aufgerufenen thread WaitOne Aufrufen Release.

SemaphoreFullException nicht notwendigerweise ein Problem mit dem Code, in dem die Ausnahme aufgetreten ist. Das folgende Szenario: Thread A und Thread B ein Semaphor, die über einen maximalen Zähler von zwei verfügt. Ein Programmierfehler in Thread B führt dazu, dass es aufrufen Release zweimal, sodass der Zähler des Semaphors voll ist. Daher, wenn thread A ruft schließlich Release, ein SemaphoreFullException ausgelöst.

Eine Liste der anfänglichen Eigenschaftenwerte für eine Instanz der SemaphoreFullException-Klasse finden Sie im SemaphoreFullException()-Konstruktor.

Im folgenden Codebeispiel wird veranschaulicht, wie ein Programmierfehler in einem Thread führen kann eine SemaphoreFullException in einem anderen Thread: zwei Threads werden in ein Semaphor. Der zweite Thread gibt das Semaphor zweimal frei, während der erste Thread seine Aufgabe noch ausgeführt wird. Wenn der erste Thread beendet und das Semaphor freigibt, den Zähler des Semaphors bereits voll ist, und eine Ausnahme ausgelöst.

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.
 */

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 2.0
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Windows Phone Silverlight
Verfügbar seit 8.0
Windows Phone
Verfügbar seit 8.1

Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.

Zurück zum Anfang
Anzeigen: