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 einen Codebereich eingibt, in dem die Auswirkungen einer Threadabbruch- oder unbehandelten 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 BeginCriticalRegion Codeblocks und EndCriticalRegion Methoden in kritische und nicht kritische Regionen veranschaulicht.
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 Codebereichen einrichten. Ein kritischer Bereich ist eine Region, in der die Auswirkungen eines Threadabbruchs oder einer unbehandelten Ausnahme möglicherweise nicht auf den aktuellen Vorgang 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 z. B. eine Aufgabe, die versucht, Arbeitsspeicher zuzuweisen, während sie eine Sperre halten. Wenn die Speicherzuweisung fehlschlägt, reicht das Abbrechen des aktuellen Vorgangs nicht aus, um die Stabilität des AppDomainVorgangs sicherzustellen, da in der Domäne andere Aufgaben vorhanden sein können, die auf dieselbe Sperre warten. Wenn der aktuelle Vorgang beendet wird, können andere Vorgänge inaktiviert werden.
Wenn ein Fehler in einem kritischen Bereich auftritt, kann der Host entscheiden, das gesamte AppDomain Entladen zu entladen, anstatt das Risiko zu übernehmen, dass die Ausführung in einem potenziell instabilen Zustand fortgesetzt wird. Rufen Sie auf BeginCriticalRegion, um den Host darüber zu informieren, dass Ihr Code einen kritischen Bereich eingibt. Aufrufen EndCriticalRegion , wenn die Ausführung zu einem nicht kritischen Codebereich zurückkehrt.
Wenn Sie diese Methode im Code verwenden, der unter SQL Server 2005 ausgeführt wird, muss der Code auf der höchsten Hostschutzebene ausgeführt werden.