Cer Enumerazione
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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 |
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.