Compartilhar via


Cer Enumeração

Definição

Cuidado

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

Especifica o comportamento do método quando chamado em uma região de execução restrita.

public enum class Cer
[System.Obsolete("The Constrained Execution Region (CER) feature is not supported.", DiagnosticId="SYSLIB0004", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public enum Cer
public enum Cer
[System.Serializable]
public enum Cer
[<System.Obsolete("The Constrained Execution Region (CER) feature is not supported.", DiagnosticId="SYSLIB0004", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
type Cer = 
type Cer = 
[<System.Serializable>]
type Cer = 
Public Enum Cer
Herança
Atributos

Campos

MayFail 1

Diante de condições excepcionais, o método pode falhar. Nesse caso, o método reportará de volta para o método de chamada se ele teve êxito ou falhou. O método deve ter uma CER em torno do corpo do método para garantir que ela possa relatar o valor retornado.

None 0

O método, tipo ou assembly não tem nenhum conceito de uma CER. Ele não aproveita as garantias da CER.

Success 2

Diante de condições excepcionais, o método tem garantia de êxito. Você sempre deve construir uma CER em torno do método chamado, mesmo quando ele é chamado de dentro de uma região fora da CER. Um método será bem-sucedido se ele fizer o que é desejado. Por exemplo, marcar Count com ReliabilityContractAttribute(Cer.Success) significa que quando ele é executado em uma CER, ele sempre retorna uma contagem do número de elementos no ArrayList e ele nunca pode deixar os campos internos em um estado indeterminado.

Exemplos

O exemplo de código a seguir demonstra o uso da Cer enumeração ao especificar uma região de execução restrita para um método. Este exemplo de código faz parte de um exemplo maior fornecido para o ReliabilityContractAttribute construtor.

[ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
[MethodImpl(MethodImplOptions.NoInlining)]
void StackDepth2()
{
    try
    {
        consistentLevel2 = false;
        if (depth == 2)
            Thread.Sleep(-1);
        StackDepth3();
    }
    finally
    {
        consistentLevel2 = true;
    }
}
<ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)>
<MethodImpl(MethodImplOptions.NoInlining)>
Sub StackDepth2()
   Try
      consistentLevel2 = False
      If depth = 2 Then Thread.Sleep(-1)
      StackDepth3()
   Finally
      consistentLevel2 = True
   End Try
End Sub

Comentários

A Cer enumeração especifica o comportamento de um método, tipo ou assembly dentro de uma CER (região de execução restrita). Use um dos três valores disponíveis para indicar que a entidade terá êxito, não tem conhecimento de uma CER ou pode (deterministicamente) ser capaz de relatar êxito ou falha.

Uma CER fornece garantias de que a região do código será executada ininterrupta mesmo se uma exceção assíncrona, como uma exceção de saída de memória de thread anulada ou estouro de pilha for gerada.

No entanto, o valor de Cer.None enumeração indica que o método, o tipo ou o assembly não tem nenhum conceito de CER. Ele não aproveita as garantias da CER. Isso significa o seguinte:

  • Diante de condições excepcionais, o método pode falhar.

  • O método pode ou não relatar que falhou (não é determinístico).

  • O método não é escrito com CERs em mente (que é o cenário mais provável).

Se um método, tipo ou assembly não estiver explicitamente marcado como bem-sucedido, ele será marcado implicitamente como Cer.None.

Aplica-se a

Confira também