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 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 |
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
.