Thread.EndCriticalRegion Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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 sont limités à la tâche actuelle.
public:
static void EndCriticalRegion();
public static void EndCriticalRegion ();
static member EndCriticalRegion : unit -> unit
Public Shared Sub EndCriticalRegion ()
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 différentes stratégies pour les échecs 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 prise en charge peuvent ne pas être limités à la tâche actuelle. En revanche, un abandon ou une défaillance dans une région de code non critique 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 tenant 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 au lieu de prendre le risque de continuer 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 de code non critique.
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é.