Thread.BeginCriticalRegion Thread.BeginCriticalRegion Thread.BeginCriticalRegion Thread.BeginCriticalRegion Method

Определение

Уведомляет узел, что выполнение близится ко входу в область кода, в которой эффекты прерывания выполнения или неуправляемого выполнения могут повлиять на другие задачи в домене приложения.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 ()

Примеры

В следующем примере показано использование BeginCriticalRegion методов и EndCriticalRegion для разделения блока кода на критические и некритические регионы.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 

Комментарии

Узлы среды CLR, например Microsoft SQL Server 2005, могут устанавливать различные политики для сбоев в критических и некритических областях кода.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. Критическая область — это одна из тех, в которых влияние прерывания потока или необработанного исключения может не ограничиваться текущей задачей.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. В отличие от этого, прерывание или сбой в некритической области кода влияет только на задачу, в которой возникла ошибка.By contrast, an abort or failure in a non-critical region of code affects only the task in which the error occurs.

Например, рассмотрим задачу, которая пытается выделить память при удержании блокировки.For example, consider a task that attempts to allocate memory while holding a lock. Если выделение памяти завершается ошибкой, то прерывание текущей задачи недостаточно для обеспечения стабильности AppDomain, так как в домене могут находиться другие задачи, ожидающие той же блокировки.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. Если текущая задача прервана, другие задачи могут быть взаимоблокированы.If the current task is terminated, other tasks could be deadlocked.

При возникновении сбоя в критической области узел может решить выгрузку всего AppDomain лишь вместо того, чтобы принимать риск продолжения выполнения в потенциально нестабильном состоянии.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. Чтобы сообщить узлу о том, что код вводит критическую область, вызовите BeginCriticalRegion.To inform the host that your code is entering a critical region, call BeginCriticalRegion. Вызывается EndCriticalRegion , когда выполнение возвращается к некритической области кода.Call EndCriticalRegion when execution returns to a non-critical region of code.

При использовании этого метода в коде, который выполняется в SQL Server 2005, требуется, чтобы код выполнялся на самом верхнем уровне защиты узла.Using this method in code that runs under SQL Server 2005 requires the code to be run at the highest host protection level.

Применяется к

Дополнительно