Thread.BeginCriticalRegion Methode

Definition

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.Notifies a host that execution is about to enter a region of code in which the effects of a thread abort or unhandled exception might jeopardize other tasks in the application domain.

public:
 static void BeginCriticalRegion();
public static void BeginCriticalRegion ();
static member BeginCriticalRegion : unit -> unit
Public Shared Sub BeginCriticalRegion ()

Beispiele

Im folgenden Beispiel wird veranschaulicht, wie die Methoden BeginCriticalRegion und EndCriticalRegion verwendet werden, um einen Codeblock in kritische und nicht kritische Bereiche aufzuteilen.The following example demonstrates the use of the BeginCriticalRegion and EndCriticalRegion methods to divide a block of code into critical and non-critical regions.

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 des Common Language Runtime (CLR), z. b. Microsoft SQL Server 2005, können unterschiedliche Richtlinien für Fehler in kritischen und nicht kritischen Codebereichen einrichten.Hosts of the common language runtime (CLR), such as Microsoft SQL Server 2005, can establish different policies for failures in critical and non-critical regions of code. Eine kritische Region ist eine Region, in der die Auswirkungen eines Thread Abbruchs oder einer nicht behandelten Ausnahme möglicherweise nicht auf die aktuelle Aufgabe beschränkt sind.A critical region is one in which the effects of a thread abort or an unhandled exception might not be limited to the current task. Im Gegensatz dazu wirkt sich ein Abbruch oder Fehler in einem nicht kritischen Code Bereich nur auf die Aufgabe aus, in der der Fehler auftritt.By contrast, an abort or failure in a non-critical region of code affects only the task in which the error occurs.

Stellen Sie sich z. b. einen Task vor, der versucht, während einer Sperre Speicher zuzuweisen.For example, consider a task that attempts to allocate memory while holding a lock. Wenn die Speicher Belegung fehlschlägt, reicht das Abbrechen der aktuellen Aufgabe nicht aus, um die Stabilität des AppDomainzu gewährleisten, weil in der Domäne andere Tasks vorhanden sein können, die auf die gleiche Sperre warten.If the memory allocation fails, aborting the current task is not sufficient to ensure stability of the AppDomain, because there can be other tasks in the domain waiting for the same lock. Wenn die aktuelle Aufgabe beendet wird, können andere Aufgaben blockiert werden.If the current task is terminated, other tasks could be deadlocked.

Wenn ein Fehler in einer kritischen Region auftritt, kann der Host die gesamte AppDomain entladen, anstatt das Risiko der Fortsetzung der Ausführung in einem potenziell instabilen Zustand zu nehmen.When a failure occurs in a critical region, the host might decide to unload the entire AppDomain rather than take the risk of continuing execution in a potentially unstable state. Um den Host zu informieren, dass der Code in einen kritischen Bereich wechselt, wenden Sie BeginCriticalRegionan.To inform the host that your code is entering a critical region, call BeginCriticalRegion. Ruft EndCriticalRegion auf, wenn die Ausführung in einen nicht kritischen Code Bereich zurückkehrt.Call EndCriticalRegion when execution returns to a non-critical region of code.

Wenn Sie diese Methode in Code verwenden, der unter SQL Server 2005 ausgeführt wird, muss der Code auf der höchsten Host Schutz Ebene ausgeführt werden.Using this method in code that runs under SQL Server 2005 requires the code to be run at the highest host protection level.

Gilt für:

Siehe auch