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

LockRecursionException-Klasse

 

Die Ausnahme, die ausgelöst wird, wenn das rekursive Erreichen einer Sperre nicht mit der Rekursionsrichtlinie der Sperre kompatibel ist.

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

System.Object
  System.Exception
    System.Threading.LockRecursionException

[SerializableAttribute]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public class LockRecursionException : Exception

NameBeschreibung
System_CAPS_pubmethodLockRecursionException()

Initialisiert eine neue Instanz der LockRecursionException-Klasse mit einer vom System generierten Meldung, die den Fehler beschreibt.

System_CAPS_protmethodLockRecursionException(SerializationInfo, StreamingContext)

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

System_CAPS_pubmethodLockRecursionException(String)

Initialisiert eine neue Instanz der LockRecursionException-Klasse mit einer angegebenen Meldung, die den Fehler beschreibt.

System_CAPS_pubmethodLockRecursionException(String, Exception)

Initialisiert eine neue Instanz der LockRecursionException-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.)

LockRecursionException für unterschiedliche Ursachen haben, einschließlich der folgenden ausgelöst:

  • Wenn ein Thread versucht, eine Instanz von ReaderWriterLockSlim rekursiv, aber die Instanz unterstützt keine Rekursion.

  • Wenn ein Thread versucht, eine ReaderWriterLockSlim Instanz im Schreibmodus oder erweiterbaren Modus, wenn der Thread zunächst die Sperre im Lesemodus zugewiesen. Dies stellt einen potenziellen Deadlocks und ist daher nicht zulässig.

  • Wenn eine weitere Ebene der Rekursion ermöglicht den maximalen Wert für den internen Speicher erfasst, die zum Nachverfolgen von Rekursionen verwendet überschreiten würde. Dieser Grenzwert ist so groß, dass die Anwendung nie auftreten sollten.

Das folgende Beispiel zeigt zwei Ursachen für LockRecursionException bei Verwendung der ReaderWriterLockSlim Klasse. Das Programm erstellt eine ReaderWriterLockSlim mit dem Standardkonstruktor, der keine Rekursionen zulässt. Das Programm startet anschließend einen Thread, der die Sperre im Lesemodus erhalten hat. Der Thread versucht, die Sperre rekursiv im Lesemodus und fängt die ausgelöste Ausnahme ab. Der Thread versucht schließlich im Schreibmodus befindet, geben die Gefahr von Deadlocks erstellen würde. Der Thread fängt die ausgelöste Ausnahme ab.

using System;
using System.Threading;

class Example
{
    // By default, the lock recursion policy for a new 
    // ReaderWriterLockSlim does not allow recursion.
    static ReaderWriterLockSlim rwls = new ReaderWriterLockSlim();

    static void ThreadProc()
    {
        Console.WriteLine("Acquire the reader lock.");
        rwls.EnterReadLock();

        try
        {
            Console.WriteLine("\nAttempt to acquire the reader lock recursively:");
            rwls.EnterReadLock();
        }
        catch (LockRecursionException lre)
        {
            Console.WriteLine("{0}: {1}", 
                lre.GetType().Name, lre.Message);
        }

        try
        {
            Console.WriteLine("\nAttempt to acquire the writer lock recursively:");
            rwls.EnterWriteLock();
        }
        catch (LockRecursionException lre)
        {
            Console.WriteLine("{0}: {1}", 
                lre.GetType().Name, lre.Message);
        }
    }

    static void Main()
    {
        Thread t = new Thread(ThreadProc);
        t.Start();
        t.Join();
    }
}

/* This code example produces output similar to the following:

Acquire the reader lock.

Attempt to acquire the reader lock recursively:
LockRecursionException: Recursive read lock acquisitions not allowed in this mode.

Attempt to acquire the writer lock recursively:
LockRecursionException: Write lock may not be acquired with read lock held. This pattern is prone to deadlocks. Consider using the upgrade lock.
 */

Universal Windows Platform
Verfügbar seit 8
.NET Framework
Verfügbar seit 3.5
Portable Class Library
Unterstützt in: portable .NET platforms
Windows Phone Silverlight
Verfügbar seit 8.0
Windows Phone
Verfügbar seit 8.1

Öffentliche statische (in Visual Basic freigegebene) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Zurück zum Anfang
Anzeigen: