Thread.BeginCriticalRegion Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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.