Partager via


Thread.BeginCriticalRegion Méthode

Définition

Avertit un hôte que l'exécution est sur le point d'entrer dans une zone de code dans laquelle les effets d'un abandon de thread ou d'une exception non gérée peuvent compromettre d'autres tâches dans le domaine d'application.

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

Exemples

L’exemple suivant illustre l’utilisation des BeginCriticalRegion méthodes et EndCriticalRegion pour diviser un bloc de code en régions critiques et non critiques.

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

Remarques

Les hôtes du Common Language Runtime (CLR), tels que Microsoft SQL Server 2005, peuvent établir des stratégies différentes pour les défaillances dans les régions critiques et non critiques du code. Une région critique est une région dans laquelle les effets d’un abandon d’un thread ou d’une exception non gérée peuvent ne pas être limités à la tâche actuelle. En revanche, un abandon ou une défaillance dans une région non critique de code affecte uniquement la tâche dans laquelle l’erreur se produit.

Par exemple, considérez une tâche qui tente d’allouer de la mémoire tout en maintenant un verrou. Si l’allocation de mémoire échoue, l’abandon de la tâche actuelle n’est pas suffisant pour garantir la stabilité du AppDomain, car d’autres tâches dans le domaine peuvent attendre le même verrou. Si la tâche actuelle est terminée, d’autres tâches peuvent être bloquées.

Lorsqu’une défaillance se produit dans une région critique, l’hôte peut décider de décharger l’intégralité AppDomain plutôt que de prendre le risque de poursuivre l’exécution dans un état potentiellement instable. Pour informer l’hôte que votre code entre dans une région critique, appelez BeginCriticalRegion. Appelez EndCriticalRegion lorsque l’exécution revient à une région non critique de code.

L’utilisation de cette méthode dans le code qui s’exécute sous SQL Server 2005 nécessite que le code soit exécuté au niveau de protection de l’hôte le plus élevé.

S’applique à

Voir aussi