Thread.BeginCriticalRegion Método

Definición

Notifica a un host que la ejecución está a punto de entrar en una región del código donde los efectos de una anulación del subproceso o de una excepción no controlada podrían constituir un riesgo para otras tareas del dominio de aplicaciones.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 ()

Ejemplos

En el ejemplo siguiente se muestra el uso de los métodos BeginCriticalRegion y EndCriticalRegion para dividir un bloque de código en regiones críticas y no críticas.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 

Comentarios

Los hosts del Common Language Runtime (CLR), como Microsoft SQL Server 2005, pueden establecer diferentes directivas para los errores en regiones críticas y no críticas de código.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. Una región crítica es aquella en la que los efectos de una anulación del subproceso o una excepción no controlada podrían no limitarse a la tarea actual.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. Por el contrario, una anulación o un error en una región de código no crítica afecta solo a la tarea en la que se produce el error.By contrast, an abort or failure in a non-critical region of code affects only the task in which the error occurs.

Por ejemplo, considere una tarea que intenta asignar memoria mientras mantiene un bloqueo.For example, consider a task that attempts to allocate memory while holding a lock. Si se produce un error en la asignación de memoria, la anulación de la tarea actual no es suficiente para garantizar la estabilidad del AppDomain, porque puede haber otras tareas en el dominio que esperan el mismo bloqueo.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. Si se finaliza la tarea actual, puede que se produzcan interbloqueos en otras tareas.If the current task is terminated, other tasks could be deadlocked.

Cuando se produce un error en una región crítica, el host puede decidir descargar todo el AppDomain en lugar de asumir el riesgo de continuar la ejecución en un estado potencialmente inestable.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. Para informar al host de que el código está entrando en una región crítica, llame a BeginCriticalRegion.To inform the host that your code is entering a critical region, call BeginCriticalRegion. Llame a EndCriticalRegion cuando la ejecución vuelva a una región de código no crítica.Call EndCriticalRegion when execution returns to a non-critical region of code.

El uso de este método en el código que se ejecuta en SQL Server 2005 requiere que el código se ejecute en el nivel de protección del host más alto.Using this method in code that runs under SQL Server 2005 requires the code to be run at the highest host protection level.

Se aplica a

Consulte también: