Cer Enumerazione

Definizione

Specifica il comportamento di un metodo quando viene chiamato all'interno di un'area di esecuzione vincolata.

public enum class Cer
[System.Serializable]
public enum Cer
public enum Cer
[<System.Serializable>]
type Cer = 
type Cer = 
Public Enum Cer
Ereditarietà
Attributi

Campi

Nome Valore Descrizione
None 0

Il metodo, il tipo o l'assembly non ha alcun concetto di cer. Non sfrutta le garanzie CER.

MayFail 1

In caso di condizioni eccezionali, il metodo potrebbe non riuscire. In questo caso, il metodo restituirà al metodo chiamante se ha avuto esito positivo o negativo. Il metodo deve avere un cer intorno al corpo del metodo per assicurarsi che possa segnalare il valore restituito.

Success 2

In caso di condizioni eccezionali, il metodo ha la certezza di avere esito positivo. È consigliabile costruire sempre un cer intorno al metodo chiamato, anche quando viene chiamato dall'interno di un'area non CER. Un metodo ha esito positivo se esegue ciò che è previsto. Ad esempio, contrassegnando Count con ReliabilityContractAttribute(Cer.Success) implica che quando viene eseguito in un'area di esecuzione, restituisce sempre un conteggio del numero di elementi in ArrayList e non può mai lasciare i campi interni in uno stato non deterministico.

Esempio

Nell'esempio di codice seguente viene illustrato l'uso dell'enumerazione Cer quando si specifica un'area di esecuzione vincolata per un metodo . Questo esempio di codice fa parte di un esempio più ampio 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 alcuna conoscenza di un'entità cer o potrebbe (deterministicamente) essere in grado di segnalare l'esito positivo o negativo.

Un'estensione cer garantisce che l'area del codice venga eseguita senza interruzioni anche se viene generata un'eccezione asincrona, ad esempio un thread interrotto o un overflow dello stack.

Tuttavia, il Cer.None valore di enumerazione indica che il metodo, il tipo o l'assembly non ha alcun concetto di cer. Non sfrutta le garanzie CER. Questo implica quanto segue:

  • In caso 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 archiviazione in mente (che è lo scenario più probabile).

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

Si applica a

Vedi anche