Condividi tramite


Thread.BeginCriticalRegion Metodo

Definizione

Notifica a un host che l'esecuzione sta per entrare in un'area di codice in cui gli effetti di un'interruzione del thread o di un'eccezione non gestita possono rappresentare un rischio per 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 metodi e per dividere un blocco BeginCriticalRegion di codice in aree critiche e non EndCriticalRegion critiche.

using namespace System::Threading;

public ref 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.
   }
};
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.
    }
}
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 nelle aree critiche e non critiche del codice. Un'area critica è un'area in cui gli effetti di un'interruzione del 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 della memoria ha esito negativo, l'interruzione dell'attività corrente non è sufficiente per garantire la stabilità di , perché nel dominio possono essere presenti altre attività in attesa dello AppDomain stesso blocco. Se l'attività corrente viene terminata, è possibile che altre attività siano in deadlock.

Quando si verifica un errore in un'area critica, l'host potrebbe decidere di scaricare l'intero anziché rischiare di continuare l'esecuzione AppDomain 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 SQL Server 2005 richiede che il codice venga eseguito al livello di protezione host più alto.

Si applica a

Vedi anche