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 chystá 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í BeginCriticalRegion a EndCriticalRegion metody k rozdělení bloku kódu do kritických a nekritické oblasti.
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 například Microsoft SQL Server 2005, můžou stanovit různé zásady 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í úlohu. Naproti tomu přerušení nebo selhání v nekritické oblasti kódu ovlivňuje pouze úlohu, ve které k chybě dochází.
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ího úkolu nestačí k zajištění stability AppDomainpaměti, protože v doméně mohou být další úkoly čekající na stejný zámek. Pokud je aktuální úkol ukončen, můžou být ostatní úkoly zablokované.
Pokud dojde k selhání v kritické oblasti, může se hostitel rozhodnout uvolnit celý AppDomain soubor, nikoli riskovat pokračování v provádění v potenciálně nestabilním stavu. Chcete-li informovat hostitele, že váš kód zadává 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.