Thread.EndCriticalRegion Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Powiadamia hosta, że wykonanie ma wprowadzić region kodu, w którym skutki przerwania wątku lub nieobsługiwanego wyjątku są ograniczone do bieżącego zadania.
public:
static void EndCriticalRegion();
public static void EndCriticalRegion ();
static member EndCriticalRegion : unit -> unit
Public Shared Sub EndCriticalRegion ()
Przykłady
W poniższym przykładzie pokazano użycie metod i do dzielenia bloku kodu na regiony krytyczne i BeginCriticalRegion EndCriticalRegion niekrytyce.
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
Uwagi
Hosty środowiska uruchomieniowego języka wspólnego (CLR), takie jak Microsoft SQL Server 2005, mogą ustanawiać różne zasady dla błędów w krytycznych i niekrytycznych regionach kodu. Krytyczny region to region, w którym skutki przerwania wątku lub nieobsługiwanego wyjątku mogą nie być ograniczone do bieżącego zadania. Z kolei przerwanie lub awaria w niekrytyowym regionie kodu ma wpływ tylko na zadanie, w którym wystąpił błąd.
Rozważmy na przykład zadanie, które próbuje przydzielić pamięć przy zachowaniu blokady. Jeśli alokacja pamięci nie powiedzie się, przerwanie bieżącego zadania nie jest wystarczające do zapewnienia stabilności , ponieważ w domenie mogą być inne zadania oczekujące na tę AppDomain samą blokadę. Jeśli bieżące zadanie zostanie zakończone, inne zadania mogą zostać zablokowane.
W przypadku wystąpienia awarii w regionie krytycznym host może zdecydować się na zwolnienie całego obszaru, zamiast ryzyko kontynuowania wykonywania w potencjalnie AppDomain niestabilnym stanie. Aby poinformować hosta, że kod wchodzi do regionu krytycznego, BeginCriticalRegion wywołaj . Wywołaj EndCriticalRegion element , gdy wykonywanie powraca do niekrytyskiego regionu kodu.
Użycie tej metody w kodzie uruchamianym SQL Server 2005 wymaga uruchomienia kodu na najwyższym poziomie ochrony hosta.