Cer Enumeração

Definição

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

public enum class Cer
[System.Serializable]
public enum Cer
public enum Cer
[<System.Serializable>]
type Cer = 
type Cer = 
Public Enum Cer
Herança
Atributos

Campos

Nome Valor Description
None 0

O método, tipo ou assembly não tem nenhum conceito de CER. Ele não toma proveito das garantias CER.

MayFail 1

Diante de condições excepcionais, o método pode falhar. Nesse caso, o método relatará novamente ao método de chamada se ele foi bem-sucedido ou falhou. O método deve ter uma CER ao redor do corpo do método para garantir que ele possa relatar o valor retornado.

Success 2

Diante de condições excepcionais, é garantido que o método tenha êxito. Você sempre deve construir um CER em torno do método que é chamado, mesmo quando ele é chamado de dentro de uma região não CER. Um método será bem-sucedido se ele realizar o que se pretende. Por exemplo, marcar Count com ReliabilityContractAttribute(Cer.Success) implica que quando ele é executado em um CER, ele sempre retorna uma contagem do número de elementos no ArrayList e 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 que uma exceção assíncrona, como uma exceção de saída de memória de thread anulada ou estouro de pilha, seja gerada.

No entanto, o valor de enumeração Cer.None indica que o método, o tipo ou o assembly não contém um conceito de CER. Ele não toma proveito das garantias 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