Thread.EndCriticalRegion Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Benachrichtigt einen Host, dass die Ausführung im Begriff ist, zu einem Codebereich überzugehen, in dem die Auswirkungen eines Threadabbruchs oder einer nicht behandelten Ausnahme auf die aktuelle Aufgabe beschränkt sind.
public:
static void EndCriticalRegion();
public static void EndCriticalRegion ();
static member EndCriticalRegion : unit -> unit
Public Shared Sub EndCriticalRegion ()
Beispiele
Im folgenden Beispiel wird die Verwendung der Methoden und veranschaulicht, um einen Codeblock in kritische und BeginCriticalRegion nicht kritische Bereiche zu EndCriticalRegion unterteilen.
using namespace System::Threading;
public ref class MyUtility
{
public:
void PerformTask()
{
// Code in this region can be aborted without affecting
// other tasks.
//
Thread::BeginCriticalRegion();
//
// The host might decide to unload the application domain
// if a failure occurs in this code region.
//
Thread::EndCriticalRegion();
//
// Code in this region can be aborted without affecting
// other tasks.
}
};
using System.Threading;
public class MyUtility
{
public void PerformTask()
{
// Code in this region can be aborted without affecting
// other tasks.
//
Thread.BeginCriticalRegion();
//
// The host might decide to unload the application domain
// if a failure occurs in this code region.
//
Thread.EndCriticalRegion();
//
// Code in this region can be aborted without affecting
// other tasks.
}
}
Imports System.Threading
Public Class MyUtility
Public Sub PerformTask()
' Code in this region can be aborted without affecting
' other tasks.
'
Thread.BeginCriticalRegion()
'
' The host might decide to unload the application domain
' if a failure occurs in this code region.
'
Thread.EndCriticalRegion()
' Code in this region can be aborted without affecting
' other tasks.
End Sub
End Class
Hinweise
Hosts der Common Language Runtime (CLR), z. B. Microsoft SQL Server 2005, können verschiedene Richtlinien für Fehler in kritischen und nicht kritischen Coderegionen einrichten. Ein kritischer Bereich ist ein Bereich, in dem die Auswirkungen eines Threadabbruchs oder einer nicht behandelten Ausnahme möglicherweise nicht auf die aktuelle Aufgabe beschränkt sind. Im Gegensatz dazu wirkt sich ein Abbruch oder Fehler in einem nicht kritischen Codebereich nur auf die Aufgabe aus, in der der Fehler auftritt.
Stellen Sie sich beispielsweise eine Aufgabe vor, die versucht, Arbeitsspeicher beim Halten einer Sperre zu reservieren. Wenn bei der Speicherzuweisung ein Fehler auftritt, reicht das Abbrechen des aktuellen Tasks nicht aus, um die Stabilität von sicherzustellen, da andere Aufgaben in der Domäne auf dieselbe AppDomain Sperre warten können. Wenn der aktuelle Task beendet wird, können andere Aufgaben deadlocked sein.
Wenn ein Fehler in einer kritischen Region auftritt, kann der Host entscheiden, das gesamte zu entladen, anstatt das Risiko einer fortgesetzten Ausführung in einem potenziell AppDomain instabilen Zustand zu eingehen. Um den Host darüber zu informieren, dass Ihr Code in eine kritische Region eintritt, rufen Sie BeginCriticalRegion auf. Rufen EndCriticalRegion Sie auf, wenn die Ausführung in einen nicht kritischen Codebereich zurückkehrt.
Die Verwendung dieser Methode in Code, der unter SQL Server 2005 ausgeführt wird, erfordert, dass der Code auf der höchsten Hostschutzebene ausgeführt wird.