Thread.BeginCriticalRegion Metodo
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.
Notifica a un host che l'esecuzione sta per immettere un'area di codice in cui gli effetti di un'interruzione del thread o di un'eccezione non gestita potrebbero compromettere altre attività nel dominio applicazione.
public:
static void BeginCriticalRegion();
public static void BeginCriticalRegion();
static member BeginCriticalRegion : unit -> unit
Public Shared Sub BeginCriticalRegion ()
Esempio
Nell'esempio seguente viene illustrato l'uso dei BeginCriticalRegion metodi e EndCriticalRegion per dividere un blocco di codice in aree critiche e non critiche.
using System.Threading;
public class MyUtility
{
public void PerformTask()
{
// Code in this region can be aborted without affecting
// other tasks.
//
Thread.BeginCriticalRegion();
//
// The host might decide to unload the application domain
// if a failure occurs in this code region.
//
Thread.EndCriticalRegion();
//
// Code in this region can be aborted without affecting
// other tasks.
}
}
open System.Threading
let performTask () =
// Code in this region can be aborted without affecting
// other tasks.
//
Thread.BeginCriticalRegion()
//
// The host might decide to unload the application domain
// if a failure occurs in this code region.
//
Thread.EndCriticalRegion()
//
// Code in this region can be aborted without affecting
// other tasks.
Imports System.Threading
Public Class MyUtility
Public Sub PerformTask()
' Code in this region can be aborted without affecting
' other tasks.
'
Thread.BeginCriticalRegion()
'
' The host might decide to unload the application domain
' if a failure occurs in this code region.
'
Thread.EndCriticalRegion()
' Code in this region can be aborted without affecting
' other tasks.
End Sub
End Class
Commenti
Gli host di Common Language Runtime (CLR), ad esempio Microsoft SQL Server 2005, possono stabilire criteri diversi per gli errori in aree critiche e non critiche del codice. Un'area critica è quella in cui gli effetti di un'interruzione di thread o di un'eccezione non gestita potrebbero non essere limitati all'attività corrente. Al contrario, un'interruzione o un errore in un'area di codice non critica influisce solo sull'attività in cui si verifica l'errore.
Si consideri, ad esempio, un'attività che tenta di allocare memoria mantenendo un blocco. Se l'allocazione di memoria non riesce, l'interruzione dell'attività corrente non è sufficiente per garantire la stabilità di AppDomain, perché possono essere presenti altre attività nel dominio in attesa dello stesso blocco. Se l'attività corrente viene terminata, è possibile che altre attività vengano bloccate.
Quando si verifica un errore in un'area critica, l'host potrebbe decidere di scaricare l'intero AppDomain invece di rischiare di continuare l'esecuzione in uno stato potenzialmente instabile. Per informare l'host che il codice sta immettendo un'area critica, chiamare BeginCriticalRegion. Chiamare EndCriticalRegion quando l'esecuzione torna a un'area di codice non critica.
L'uso di questo metodo nel codice eseguito in SQL Server 2005 richiede l'esecuzione del codice al livello di protezione host più elevato.