Thread.EndCriticalRegion Metoda

Definice

Upozorní hostitele, že spuštění se má zadat oblast kódu, ve které jsou účinky přerušení vlákna nebo neošetřené výjimky omezeny na aktuální úlohu.

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 a k rozdělení bloku kódu do kritických BeginCriticalRegion EndCriticalRegion a nekritičtějších oblastí.

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), například Microsoft SQL Server 2005, mohou vytvořit různé zásady pro selhání v kritických a nekritičtějších oblastech kódu. Kritická oblast je ta, ve které účinky přerušení vlákna nebo neošetřené výjimky nemusí být omezeny na aktuální úlohu. Naproti tomu přerušení nebo selhání v nekritické oblasti kódu ovlivňuje pouze úlohu, ve které dochází k chybě.

Představte si například úlohu, která se pokusí přidělit paměť při držení zámku. Pokud přidělení paměti selže, přerušení aktuální úlohy není dostatečné k zajištění stability , protože v doméně mohou být jiné úlohy čekající na AppDomain stejný zámek. Pokud je aktuální úkol ukončen, ostatní úkoly mohou být zablokovány.

Pokud dojde k selhání v kritické oblasti, hostitel se může rozhodnout uvolnit celý místo toho, aby riskoval pokračování v provádění v potenciálně AppDomain nestabilním stavu. Pokud chcete informovat hostitele, že váš kód zadáváte kritickou oblast, zavolejte BeginCriticalRegion . Volání, EndCriticalRegion když se provádění vrátí do nekritické oblasti kódu.

Použití této metody v kódu, který běží pod SQL Server 2005, vyžaduje, aby byl kód spuštěn na nejvyšší úrovni ochrany hostitele.

Platí pro

Viz také