Condividi tramite


Cer Enumerazione

Definizione

Attenzione

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

Specifica un comportamento per il metodo chiamato all'interno di un'area a esecuzione vincolata (CER, Constrained Execution Region).

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
Ereditarietà
Attributi

Campi

MayFail 1

In condizioni eccezionali, il metodo può avere esito negativo. In tal caso, il metodo segnalerà al metodo chiamante l'esito positivo o negativo. È necessaria la presenza di una CER attorno al corpo del metodo per consentire al metodo di fornire il valore restituito.

None 0

Il metodo, il tipo o l'assembly non è a conoscenza di una CER. Non usufruisce dei vantaggi delle garanzie di un'area a esecuzione vincolata.

Success 2

In condizioni eccezionali, è garantito l'esito positivo del metodo. È sempre necessario costruire una CER attorno al metodo chiamato, anche quando viene chiamato dall'interno di un'area non CER. Un metodo ha esito positivo se esegue le azioni previste. Ad esempio, contrassegnando Count con ReliabilityContractAttribute(Cer.Success) implica che quando viene eseguito in un cer, restituisce sempre un conteggio del numero di elementi nell'oggetto ArrayList e non può mai lasciare i campi interni in uno stato indeterminato.

Esempio

Nell'esempio di codice seguente viene illustrato l'uso dell'enumerazione quando si specifica un'area Cer di esecuzione vincolata per un metodo. Questo esempio di codice fa parte di un esempio più grande fornito per il ReliabilityContractAttribute costruttore.

[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

Commenti

L'enumerazione Cer specifica il comportamento di un metodo, un tipo o un assembly all'interno di un'area di esecuzione vincolata . Usare uno dei tre valori disponibili per indicare che l'entità avrà esito positivo, non ha conoscenza di un cer o potrebbe (deterministicamente) essere in grado di segnalare l'esito positivo o negativo.

Un cer fornisce garanzie che l'area del codice venga eseguita senza interruzioni anche se viene generata un'eccezione asincrona, ad esempio un'eccezione di thread interrotta in memoria o l'overflow dello stack.

Tuttavia, il valore di enumerazione indica che il metodo, il tipo o l'assembly Cer.None non ha alcun concetto di cer. Non usufruisce dei vantaggi delle garanzie di un'area a esecuzione vincolata. Questo implica quanto segue:

  • A fronte di condizioni eccezionali, il metodo potrebbe non riuscire.

  • Il metodo potrebbe o non segnalare che non è riuscito (non deterministico).

  • Il metodo non viene scritto con le richieste di sicurezza in mente (che è lo scenario più probabile).

Se un metodo, un tipo o un assembly non è contrassegnato in modo esplicito per esito positivo, viene contrassegnato in modo implicito come Cer.None.

Si applica a

Vedi anche