Прочитать на английском

Поделиться через


Thread.BeginCriticalRegion Метод

Определение

Уведомляет узел, что выполнение близится ко входу в область кода, в которой эффекты прерывания выполнения или неуправляемого выполнения могут повлиять на другие задачи в домене приложения.

public static void BeginCriticalRegion ();

Примеры

В следующем примере показано использование BeginCriticalRegion EndCriticalRegion методов и для разделения блока кода на критические и некритические регионы.

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.
    }
}

Комментарии

узлы среды clr, например Microsoft SQL Server 2005, могут устанавливать различные политики для сбоев в критических и некритических областях кода. Критическая область — это одна из тех, в которых влияние прерывания потока или необработанного исключения может не ограничиваться текущей задачей. В отличие от этого, прерывание или сбой в некритической области кода влияет только на задачу, в которой возникла ошибка.

Например, рассмотрим задачу, которая пытается выделить память при удержании блокировки. Если выделение памяти завершается ошибкой, то прерывание текущей задачи недостаточно для обеспечения стабильности AppDomain , так как в домене могут находиться другие задачи, ожидающие той же блокировки. Если текущая задача прервана, другие задачи могут быть взаимоблокированы.

При возникновении сбоя в критической области узел может решить выгрузку всего лишь вместо того, чтобы AppDomain принимать риск продолжения выполнения в потенциально нестабильном состоянии. Чтобы сообщить узлу о том, что код вводит критическую область, вызовите BeginCriticalRegion . Вызывается, EndCriticalRegion когда выполнение возвращается к некритической области кода.

при использовании этого метода в коде, который выполняется в SQL Server 2005, требуется, чтобы код выполнялся на самом верхнем уровне защиты узла.

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

См. также раздел