Condividi tramite


Thread.EndCriticalRegion 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 sono limitati all'attività corrente.

public:
 static void EndCriticalRegion();
public static void EndCriticalRegion ();
static member EndCriticalRegion : unit -> unit
Public Shared Sub EndCriticalRegion ()

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 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.
    }
}
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 nelle aree critiche e non critiche del codice. Un'area critica è una in cui gli effetti di un'interruzione del thread o un'eccezione non gestita potrebbero non essere limitati all'attività corrente. Al contrario, un errore o un'interruzione in un'area non critica del codice 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 AppDomain, perché è possibile che siano presenti altre attività nel dominio in attesa dello stesso blocco. Se l'attività corrente viene terminata, altre attività potrebbero essere deadlock.

Quando si verifica un errore in un'area critica, l'host potrebbe decidere di scaricare l'intero anziché prendere il rischio di continuare l'esecuzione AppDomain in uno stato potenzialmente instabile. Per informare l'host che il codice immette un'area critica, chiamare BeginCriticalRegion. Chiamare EndCriticalRegion quando l'esecuzione restituisce un'area non critica del codice.

L'uso di questo metodo nel codice eseguito in SQL Server 2005 richiede che il codice venga eseguito al livello di protezione host più alto.

Si applica a

Vedi anche