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

Si applica a

Vedi anche