RuntimeHelpers.PrepareConstrainedRegions Метод

Определение

Внимание!

The Constrained Execution Region (CER) feature is not supported.

Назначает основную часть кода как область с ограничением исполнения (CER).

C#
[System.Obsolete("The Constrained Execution Region (CER) feature is not supported.", DiagnosticId="SYSLIB0004", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public static void PrepareConstrainedRegions ();
C#
[System.Security.SecurityCritical]
public static void PrepareConstrainedRegions ();
C#
public static void PrepareConstrainedRegions ();
Атрибуты

Примеры

В следующем примере показано, как надежно задать дескрипторы с помощью PrepareConstrainedRegions метода . Чтобы надежно задать дескриптор для заданного существующего дескриптора, необходимо убедиться, что выделение собственного дескриптора и последующая запись этого дескриптора в SafeHandle объекте являются атомарными. Любой сбой между этими операциями (например, прерывание потока или исключение нехватки памяти) приведет к утечке собственного дескриптора. Вы можете использовать метод , PrepareConstrainedRegions чтобы убедиться, что дескриптор не просочился.

C#
[StructLayout(LayoutKind.Sequential)]
struct MyStruct
{
    public IntPtr m_outputHandle;
}

sealed class MySafeHandle : SafeHandle
{
    // Called by P/Invoke when returning SafeHandles
    public MySafeHandle()
        : base(IntPtr.Zero, true)
    {
    }

    public MySafeHandle AllocateHandle()
    {
        // Allocate SafeHandle first to avoid failure later.
        MySafeHandle sh = new MySafeHandle();

        RuntimeHelpers.PrepareConstrainedRegions();
        try { }
        finally
        {
            MyStruct myStruct = new MyStruct();
            NativeAllocateHandle(ref myStruct);
            sh.SetHandle(myStruct.m_outputHandle);
        }

        return sh;
    }

Комментарии

Компиляторы используют этот метод для пометки catchблоков , finallyи fault как ограниченные области выполнения (CER). Код, помеченный как ограниченный регион, должен вызывать только другой код со строгими контрактами надежности. Она не должна выделять или выполнять виртуальные вызовы неподготовленных или ненадежных методов, если она не готова к обработке сбоев.

Обратите внимание, что между вызовом метода и блоком не допускаются коды операций на промежуточном tryPrepareConstrainedRegions языке, кроме NOP. Дополнительные сведения о cer см. в разделе классы в System.Runtime.ConstrainedExecution пространстве имен .

CeR, помеченные с помощью PrepareConstrainedRegions метода , не работают идеально при StackOverflowException создании из try блока . Дополнительные сведения см. в описании метода ExecuteCodeWithGuaranteedCleanup.

Метод PrepareConstrainedRegions вызывает метод ProbeForSufficientStack.

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

Өнім Нұсқалар (Ескірген)
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1 (5, 6, 7, 8, 9)
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1