Udostępnij za pośrednictwem


Thread.EndCriticalRegion Metoda

Definicja

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.

Dotyczy

Zobacz też