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.
Attenzione
The Constrained Execution Region (CER) feature is not supported.
Specifica il comportamento di un metodo quando viene chiamato all'interno di un'area di esecuzione vincolata.
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
| 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.