Thread.EndCriticalRegion Metoda

Definice

Upozorňuje hostitele, že se o tom, že spuštění chystá, zadat oblast kódu, ve které se účinky přerušení vlákna nebo Neošetřená výjimka omezí na aktuální úkol.Notifies a host that execution is about to enter a region of code in which the effects of a thread abort or unhandled exception are limited to the current task.

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

Příklady

Následující příklad ukazuje použití metod BeginCriticalRegion a EndCriticalRegion k rozdělení bloku kódu do kritických a nekritických oblastí.The following example demonstrates the use of the BeginCriticalRegion and EndCriticalRegion methods to divide a block of code into critical and non-critical regions.

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 

Poznámky

Hostitelé modulu CLR (Common Language Runtime), jako je například Microsoft SQL Server 2005, mohou vytvořit různé zásady pro chyby v kritických a nekritických oblastech kódu.Hosts of the common language runtime (CLR), such as Microsoft SQL Server 2005, can establish different policies for failures in critical and non-critical regions of code. Kritická oblast je jedna, ve které se účinky přerušení vlákna nebo Neošetřená výjimka nemusí omezovat na aktuální úlohu.A critical region is one in which the effects of a thread abort or an unhandled exception might not be limited to the current task. Naproti tomu přerušení nebo selhání v nekritické oblasti kódu ovlivní pouze úlohu, ve které dojde k chybě.By contrast, an abort or failure in a non-critical region of code affects only the task in which the error occurs.

Představte si třeba úlohu, která se pokusí přidělit paměť a zároveň drží zámek.For example, consider a task that attempts to allocate memory while holding a lock. Pokud se přidělení paměti nepovede, přerušení aktuální úlohy nestačí, aby se zajistila stabilita AppDomain, protože v doméně můžou být jiné úlohy, které čekají na stejný zámek.If the memory allocation fails, aborting the current task is not sufficient to ensure stability of the AppDomain, because there can be other tasks in the domain waiting for the same lock. Pokud je aktuální úloha ukončena, můžou být zablokované jiné úkoly.If the current task is terminated, other tasks could be deadlocked.

Pokud dojde k selhání v kritické oblasti, hostitel se může rozhodnout uvolnit celou AppDomain místo toho, aby vybral riziko pokračování v nestabilním stavu.When a failure occurs in a critical region, the host might decide to unload the entire AppDomain rather than take the risk of continuing execution in a potentially unstable state. Chcete-li informovat hostitele, že váš kód vstupuje do kritické oblasti, zavolejte BeginCriticalRegion.To inform the host that your code is entering a critical region, call BeginCriticalRegion. Zavolá EndCriticalRegion, když se provádění vrátí do nekritické oblasti kódu.Call EndCriticalRegion when execution returns to a non-critical region of code.

Použití této metody v kódu, který běží v SQL Server 2005 vyžaduje, aby byl kód spuštěn na nejvyšší úrovni ochrany hostitele.Using this method in code that runs under SQL Server 2005 requires the code to be run at the highest host protection level.

Platí pro

Viz také