Sdílet prostřednictvím


Thread.BeginCriticalRegion Metoda

Definice

Upozorní hostitele, že se spuštění chystá zadat oblast kódu, ve které by účinky přerušení vlákna nebo neošetřené výjimky mohly ohrozit jiné úlohy v doméně aplikace.

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

Příklady

Následující příklad ukazuje použití BeginCriticalRegion metod a EndCriticalRegion k rozdělení bloku kódu na kritické a nekrité oblasti.

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

Poznámky

Hostitelé modulu CLR (Common Language Runtime), jako je Microsoft SQL Server 2005, můžou vytvořit různé zásady pro selhání v kritických a nekritičtějších oblastech kódu. Kritická oblast je oblast, ve které nemusí být účinky přerušení vlákna nebo neošetřené výjimky omezeny na aktuální úkol. Naproti tomu přerušení nebo selhání v nekrité oblasti kódu ovlivňuje pouze úlohu, ve které k chybě dochází.

Představte si například úkol, který se pokusí přidělit paměť, zatímco drží zámek. Pokud přidělení paměti selže, přerušení aktuální úlohy nestačí k zajištění stability AppDomain, protože v doméně můžou na stejný zámek čekat další úlohy. Pokud je aktuální úkol ukončen, ostatní úkoly můžou být zablokované.

Pokud dojde k selhání v kritické oblasti, hostitel se může rozhodnout uvolnit celý AppDomain soubor místo rizika pokračování provádění v potenciálně nestabilním stavu. Pokud chcete hostitele informovat, že váš kód vstupuje do kritické oblasti, zavolejte BeginCriticalRegion. Volání EndCriticalRegion , když se provádění vrátí do nekritičtější oblasti kódu.

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.

Platí pro

Viz také