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