Thread.BeginCriticalRegion Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Уведомляет узел о том, что выполнение будет входить в регион кода, в котором последствия прерывания потока или необработанного исключения могут поставить под угрозу другие задачи в домене приложения.
public:
static void BeginCriticalRegion();
public static void BeginCriticalRegion();
static member BeginCriticalRegion : unit -> unit
Public Shared Sub 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.
}
}
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 г., требует выполнения кода на самом высоком уровне защиты узла.