Thread.BeginCriticalRegion 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 andere Aufgaben in der Anwendungsdomäne gefährden könnten.
public:
static void BeginCriticalRegion();
public static void BeginCriticalRegion ();
static member BeginCriticalRegion : unit -> unit
Public Shared Sub BeginCriticalRegion ()
Beispiele
Im folgenden Beispiel wird die Verwendung der BeginCriticalRegion Methoden und EndCriticalRegion veranschaulicht, um einen Codeblock in kritische und nicht kritische Bereiche aufzuteilen.
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.
}
}
open System.Threading
let 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 unterschiedliche 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.
Betrachten Sie beispielsweise eine Aufgabe, die versucht, Arbeitsspeicher zuzuweisen, während eine Sperre gehalten wird. Wenn die Speicherbelegung fehlschlägt, reicht das Abbrechen der aktuellen Aufgabe nicht aus, um die Stabilität von AppDomainsicherzustellen, da andere Aufgaben in der Domäne auf dieselbe Sperre warten können. Wenn die aktuelle Aufgabe beendet wird, können andere Aufgaben deadlocked werden.
Wenn ein Fehler in einer kritischen Region auftritt, entscheidet sich der Host möglicherweise, die gesamte AppDomain Ausführung zu entladen, anstatt das Risiko einzugehen, dass die Ausführung in einem potenziell instabilen Zustand fortgesetzt wird. Rufen Sie BeginCriticalRegionauf, um den Host darüber zu informieren, dass Ihr Code in einen kritischen Bereich eintritt. Rufen Sie auf EndCriticalRegion , wenn die Ausführung in einen nicht kritischen Codebereich zurückkehrt.
Wenn Sie diese Methode in Code verwenden, der unter SQL Server 2005 ausgeführt wird, muss der Code auf der höchsten Hostschutzebene ausgeführt werden.