Thread.EndCriticalRegion Метод

Определение

Уведомляет узел о том, что выполнение будет ввести регион кода, в котором последствия прерывания потока или необработанного исключения ограничены текущей задачей.

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

Примеры

В следующем примере показано использование 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.
    }
}
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

Комментарии

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

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

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

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

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

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